- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558969 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173064
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
$ R+ K7 C h9 u( z# C8 n. a
一行Python代码有多强,可让图形秒变「手绘风」
% w4 T6 P0 \$ c之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具$ ~/ I6 a! F0 E6 `
# L6 n- J' m+ w8 R/ g& ]& K1 f
( u4 U3 ]" E+ O0 s w' b但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。! I1 B, o& \) z9 c( c/ \/ H5 ]
1 c3 _$ i5 e( \3 l! l+ Z5 d S0 @2 ?0 W! p& X) i+ p2 l
matplotlib.pyplot.xkcd()简介
+ J4 W# W9 ?4 F) K/ T& T# V这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
8 s* k2 W! |- _1 a4 h5 l
5 R; |' O) o% h, \1 c' g' J
) j( x3 a! `( l. i5 Ymatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
' @) e/ s+ z: h6 E: m0 X, p length=100, #褶皱长度
8 f) t% e' O3 `- F- A( t; f) e+ b. p, x randomness=2#褶皱的随机性: S" c: ?; V% N) R4 ]! f
)3 q6 G! l& j/ u1 @6 L& q* Z
matplotlib.pyplot.xkcd()使用# k! L8 v+ h7 o. D' N! X( r3 g; x
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
( `+ ?' {; U. k C% c- n) z
4 X i; P* V( Y; S' _
+ U8 T2 i- _6 n2 n) x5 \7 iwith plt.xkcd(scale=1, length=100, randomness=2):+ q* {7 ?' C- f3 @( C# i
#with是临时使用一下,不影响其它图使用正常样式5 B8 S0 W0 I! `" h4 H
绘图代码7 M; x1 G# s' \# y& w7 b
。。。。。。( `8 v: |2 |/ K$ R4 a7 r
plt.show()
4 D+ e/ V6 I( l! gmatplotlib.pyplot.xkcd()使用实例
5 e2 |$ i2 {/ Y/ c c下面代码为pythonic生物人公众号之前的文章代码
0 W* A0 H" e8 Z/ |3 Z" h' M% g; z
2 m/ l; f6 X; |7 q8 W F. o1 n6 |+ [- X; i9 q
以下参考:Python可视化25|seaborn绘制矩阵图5 t& b+ e' f6 p
; H W' e/ K: V5 _4 n2 L4 x
1 D" u% |7 L+ j' E#支持seaborn/ x0 G# F5 w! |' L8 ^
import seaborn as sns
/ W [& b$ }5 G2 X4 w, q( p; oiris_sns = sns.load_dataset("iris")
% ^' i9 l$ O, H6 P/ Nwith plt.xkcd():/ ]8 w3 K$ L) c! k
g = sns.pairplot(/ E7 K2 `- q7 e0 B: k
iris_sns," j; B2 ~, W4 g7 ?
hue='species', #按照三种花分类
; O, m2 Q8 K/ y5 C& ?$ H- k palette=['#dc2624', '#2b4750', '#45a0a2'])
$ W) m( \8 x6 O5 C% n7 `$ `6 i sns.set(style='whitegrid')+ x( J/ @: @; _. J0 L
g.fig.set_size_inches(12, 12)/ ?0 b2 r9 |, R$ X* Q0 E
sns.set(style='whitegrid', font_scale=1.5)3 p8 D3 _2 d& C# R& W
- Z8 H; u1 o; A7 Q9 y+ P/ Y
; K3 s/ n; K+ L5 A0 e$ Q, t, Y+ b2 f; M! z% m# k+ N6 U
以下参考:Python可视化29|matplotlib-饼图(pie) : h( x/ _1 f2 Q2 h* |7 c' O
, I0 t: L" S, A- m; B# V: ]- ]
' ^+ K; ~8 ^* V! y A/ a
import matplotlib.pyplot as plt
! j0 q1 A6 s1 ewith plt.xkcd(. p/ s. G0 k' a. L8 F. B
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度3 {( i/ F v4 [; F& g
length=120, #褶皱长度
3 g ^' F0 [9 ^ Y. T6 `9 x3 w2 _ randomness=2): #褶皱的随机性. n8 H* H1 y0 j/ T! t/ X
plt.figure(dpi=150)/ A5 e: F% v2 Q7 E2 z# n) o5 [* r
patches, texts, autotexts = plt.pie(: H$ F/ j% j; Y F }+ m
x=[1, 2, 3], #返回三个对象
+ E! w+ y" Z1 j labels=['A', 'B', 'C'],
; m4 `' G a+ i& C4 v2 m6 x colors=['#dc2624', '#2b4750', '#45a0a2'],
8 E. \; Z G3 @+ ^( Y2 A" k autopct='%.2f%%',
+ l6 O! y z% N/ I" h3 C explode=(0.1, 0, 0))/ j* t+ `) A: k! {# L" G, i
texts[1].set_size('20') #修改B的大小
: @; c6 H4 U' p+ u8 v# r) t
9 B3 p8 O1 @0 w% N" F9 x @: A! | #matplotlib.patches.Wedge, b$ t! j( {7 D. r; x% S' ~# d
patches[0].set_alpha(0.3) #A组分设置透明度
1 m( b3 [$ d6 P$ q9 V patches[2].set_hatch('|') #C组分添加网格线, _( X2 ?0 y$ ~, p9 k) Q- E( s
patches[1].set_hatch('x')1 b5 [0 k6 s& p1 W! e, C7 D. ~/ J/ v
, l% ^7 W G/ O- b
plt.legend(
* i* L7 m, p- v; `: p% i patches,
" ?+ E z% m, R) `& R ['A', 'B', 'C'], #添加图例! i& w! B, D, b, X+ C) @
title="Pie Learning",% d/ i4 l1 |& u( I" T- O3 h
loc="center left",. D# r$ F3 L7 _
fontsize=15,
. f, d6 [: K9 M' z bbox_to_anchor=(1, 0, 0.5, 1))
. N6 [1 t9 l5 E1 c" W7 I 9 f) ~5 g1 V; I+ b5 c) J( E' u
plt.title('Lovely pie', size=20)( H0 ^/ V9 z M4 ^ j- |% o
plt.show()
8 r: i9 J4 C% Q0 B$ O5 u3 Z% \0 m7 W0 c
* W+ {" d$ G2 j& E4 g! C
5 i+ q9 ]& _1 J' Q# c% w) F8 F
' ~3 N6 c- |- o2 [/ s) w, N7 `$ }7 mwith plt.xkcd():
9 T9 N K: B9 u; L& a from string import ascii_letters" p0 a, O- W/ k9 |5 v* z
plt.figure(dpi=150)
+ I0 L, ~9 @' y- n$ s patches, texts, autotexts = plt.pie(2 k$ p9 C& n) a! @! k
x=range(1, 12),. ]2 T1 S; ]9 ]1 f2 e1 h' n& P! d
labels=list(ascii_letters[26:])[0:11],
( {: q. e/ _; ]2 ~* _+ `5 c% H colors=[
9 K5 |7 o! ^( H( A* c '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',7 o d5 ~1 e0 c1 q5 M
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf', L, f2 ]( S( G
],
% Y- ]" N n* T9 k3 T$ G, `5 t autopct='%.2f%%',/ D5 @+ u- y' P/ G
)
8 j2 ^: L: A- q$ {& y plt.legend(
9 z( y8 a" z9 D$ E9 k7 S patches,
% h6 s& Q3 }' I) t list(ascii_letters[26:])[0:11], #添加图例( d- V7 T; x. p/ N" v
title="Pie Learning",! w; p( y/ A7 m! S7 e3 [" o8 Z
loc="center left",4 \) h6 J/ A- D" S$ b+ A. Z% V
bbox_to_anchor=(1, 0, 0.5, 1),
* `0 O& K! i2 J ncol=2, #控制图例中按照两列显示,默认为一列显示,) a* \3 t. o2 H" ?+ C, W
) l: S3 A# G, H9 U% i" m
y+ _4 u0 v( s: d6 N, T1 x
, p: W. A5 d2 q% J" y9 t
: \4 f, @0 c8 U9 K0 D7 H: o( s$ A: ~( g
import matplotlib.pyplot as plt3 Z( h3 k2 Q* ?; D' U
import numpy as np) ]# `& q& z) e, w+ i! Z
with plt.xkcd():. E7 |" W) q( R/ j6 G
plt.figure(dpi=150)
6 l% \, l3 x7 y7 L4 l) a- _ labels = ['Jack', 'Rose', 'Jimmy']
' y& \( w$ Z2 c2 G( c' T year_2019 = np.arange(1, 4)
& ~- L5 r8 ^( ?/ `9 T- p year_2020 = np.arange(1, 4) + 1, D* Z; D! a& N3 X) Z0 Q
bar_width = 0.4
7 d+ d ?5 t! o% ? b
7 j' \, f- h1 _3 q plt.bar(
. M* r! h) G& B8 h np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
6 q. a9 a3 ^+ g1 y0 b6 l& | year_2019,) `* r& M0 l: I2 h( u7 G7 K0 M
color='#dc2624'," G* B1 P, j, I9 h) w) @ x
width=bar_width,% Y! h* J; U* J+ f1 B* b% {
label='year_2019' #图例
* V2 A! {# e- d" ]! r4 J: P' Z )
) V+ r# @) ]- v4 s plt.bar(8 {. X; ]# m% }, `4 U* A* y
np.arange(len(labels)) + bar_width / 2,: C8 q4 Z# J4 z: h* w" G
year_2020,
8 c6 `. [1 K; E: [; M color='#45a0a2',
1 u6 x+ `' @$ }/ m! s7 ~ width=bar_width,# j6 Q. r/ s1 m- t. j
label='year_2020' #图例- c7 |% y1 |5 O( c* y
)
$ |' x) ?% z% G: _" @9 K. N plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称+ w' c( i) V5 I6 G1 C$ N+ s0 m
plt.legend(loc=2) #图例在左边8 m: K' |* r6 U
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
n8 n) _+ [3 D9 |
2 K: ]! b* E, x- x d8 }0 ?- {- A8 l& }: Y9 D& \; }/ r
7 ? c w6 ^6 S) s1 \ _# d; N+ l7 ^7 Y
2 s x; W! T: Z, I) W' H7 f2 M: C- C/ t7 d4 b: M5 m
以下参考: Python可视化|matplotlib10-绘制散点图scatter- L; n' D$ d2 ?. w! E
- e' |# ^9 N* }9 n
, D$ \, K% ?, aimport matplotlib.pyplot as plt9 H5 W; `: P \9 D1 B; C
import numpy as np
, X7 `) B! s& R) |import pandas as pd
% l9 q( ?& L# t5 Kfrom pandas import Series, DataFrame
$ @5 H: Z2 k5 S) @#数据准备
6 Q7 I @+ h) rfrom sklearn import datasets. }5 P9 b7 X( r/ W# I1 I9 i. k
+ Z7 T& \4 {/ H5 n6 Q4 Firis = datasets.load_iris()
4 m! u$ U9 k" n1 Ux, y = iris.data, iris.target
^- {4 T( W0 L% {2 s5 P1 a7 Ipd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
' I( N% m8 m, M: c9 ]( R columns=[# r4 A2 F! ^( l2 }% A
'sepal length(cm)', 'sepal width(cm)',
. z. w. W7 x7 |+ s, _ 'petal length(cm)', 'petal width(cm)', 'class'% t- S7 @" Y: g& O+ z4 u9 v( Z% t8 }# ]
])
# S$ j& T. a; z- |with plt.xkcd():
$ f# i% x* \4 X0 r& | b2 I
& k) ~7 n2 g C; @! F$ |( N# u6 m2 j2 G plt.figure(dpi=150) #设置图的分辨率+ B0 n# M6 o: z9 b
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
+ ]0 U- j3 G- Y9 A: Z" @ iris_type = pd_iris['class'].unique() #根据class列将点分为三类
3 G9 K. J" x& v iris_name = iris.target_names #获取每一类的名称
8 c; N- m( \. x1 o6 h colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色& n6 x* ]4 `9 r( @& C
markers = ['$\clubsuit$', '.', '+'] #三种不同图形
h/ F* z1 ~/ V. G z ) `: P' R9 a" Z \
for i in range(len(iris_type)):, u( n: |6 _ L/ G
plt.scatter(1 p6 b% l3 L6 X" Y& V0 D5 E
pd_iris.loc[pd_iris['class'] == iris_type,+ ]; i. h: J. f5 J/ |: J \! v
'sepal length(cm)'], #传入数据x/ }4 V3 O( \+ L9 r
pd_iris.loc[pd_iris['class'] == iris_type,
' h0 `3 E, F! a 'sepal width(cm)'], #传入数据y( w( R0 W; \5 j/ b3 `, C7 R
s=50, #散点图形(marker)的大小
* r& t& X% _4 x" ~/ K- n- _% z" Y; ? c=colors, #marker颜色6 ]" s. x' x7 B
marker=markers, #marker形状
' `. b+ v! h. F& P& [, d #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
! c1 u+ A5 ^( J3 A1 C alpha=0.8, #marker透明度,范围为0-1
8 w: q4 P/ ^$ P# _: y% Y facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
$ e: p& z% j1 Y edgecolors='none', #marker的边缘线色
6 @ I& X1 p, S& W8 J |4 ~: h M0 ^ linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
& O: D$ @9 L \9 a label=iris_name) #后面图例的名称取自label
* c5 O, } B7 ~0 C- H+ X% C0 ? ! X- z1 a b( X) v+ o/ Z
plt.legend(loc='upper right')
/ K4 Y5 X! m% Y5 L# t! e2 @& h$ D' K
7 Y; ]. q& I+ {! |————————————————0 u* i' {! P8 u4 H( u
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。9 z9 C' R. w. z4 D: \& f9 O% L% D
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753) ~& H/ r* f0 ?1 ^. L" C
. O& L- \5 x1 P7 F* w2 R9 h! s+ j1 m! X1 C9 w& E
|
zan
|