- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564568 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174593
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
! w4 `4 M' t; l- e, k, A一行Python代码有多强,可让图形秒变「手绘风」" f' U7 p3 j6 p- D
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具 i8 l0 J9 r% u" w% Z9 D2 V3 h5 _/ _
1 V5 \8 S1 s. f; Z1 b; H; l: ^$ V: J$ k m7 K, K8 S5 Y9 G
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
- e+ b& y3 x6 `3 M6 `6 u
# v' g& r, M+ b, X, l
9 K7 ^! j5 D+ f. U2 \( Lmatplotlib.pyplot.xkcd()简介
( D0 J# ^9 S0 A4 p o这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小 R4 ?% R# P( s! X
% \- ]2 J- _7 g6 [% f2 J: {
3 L1 F; w7 N9 d; I4 A! J( Lmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度; ~' L2 D3 C. N2 q2 C. V( l
length=100, #褶皱长度) t; b$ v* R4 h: ^
randomness=2#褶皱的随机性
/ A7 J5 E3 w0 G) V# z6 ? )
$ W$ w$ E' r0 ]) O, L! Zmatplotlib.pyplot.xkcd()使用6 |+ Q( W! B) K8 Z- a+ p1 X( R
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~& [" s0 Q, v# ]& r- z+ Y, q
* f) d( _( F' L7 x+ q, U8 p6 ?9 g/ N! O# R/ g# a
with plt.xkcd(scale=1, length=100, randomness=2):
: Q/ N1 Q+ [ w# s [#with是临时使用一下,不影响其它图使用正常样式3 u+ t$ N) B# o0 v
绘图代码% g$ k* [" Z; e
。。。。。。% s. |6 B$ i' p. U
plt.show()3 `) j7 |8 |- S
matplotlib.pyplot.xkcd()使用实例
; w- I! j5 R- Z0 o& f t3 F& Q下面代码为pythonic生物人公众号之前的文章代码 `3 e8 D7 \( @4 c I
( f: P$ M% j) O6 b2 [: M1 w0 c
; u' l; ]+ I. P0 y$ T- K$ ?0 i
以下参考:Python可视化25|seaborn绘制矩阵图
1 _5 S' a& C* A; M4 _: `
3 H: z# x5 B0 i( g1 `# a+ Y; i* L+ |2 A3 C. v
#支持seaborn
7 y# Z- Y4 c9 P; I0 t2 X% h9 u- I Aimport seaborn as sns
9 c8 j) y+ y4 k5 T: ?, z& piris_sns = sns.load_dataset("iris")
` u: \* i; Pwith plt.xkcd():: f2 f+ f' T, i8 u: I" T
g = sns.pairplot(/ Q; i; V, @. J- {% d
iris_sns,
/ B1 V( E/ w, H* u, B hue='species', #按照三种花分类5 R0 i! g h( \9 ~( x
palette=['#dc2624', '#2b4750', '#45a0a2'])/ h- c s/ V& k4 V5 c; ~4 n
sns.set(style='whitegrid')
+ _% S- S! ?1 F* O2 q/ L( M; V g.fig.set_size_inches(12, 12)
0 C0 x' Z7 r+ b# k" w5 j# J5 s3 s sns.set(style='whitegrid', font_scale=1.5)
- l, \2 j& a% k& M # O8 A8 d' E8 |7 g7 w! M. K( \
) B' E1 a, e4 d$ z8 e+ ?+ }' X$ N: M3 N. L& n' m9 I$ J
以下参考:Python可视化29|matplotlib-饼图(pie)
8 I8 a3 ?5 @) b: x; q
; H' L. o& Y8 `( b+ t8 k: i% q2 }) W8 S T: t9 R; s
import matplotlib.pyplot as plt7 c' @& A4 G( `$ o+ I4 a
with plt.xkcd( z+ k: n) k% v: Y% T
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
- }3 s: ^0 I0 d$ n7 f; N( H length=120, #褶皱长度
6 l8 H' }! y) m& l randomness=2): #褶皱的随机性
+ h/ w8 [$ o9 W! F plt.figure(dpi=150)/ U" C( r# f+ t6 {
patches, texts, autotexts = plt.pie(- h& C6 S/ \5 w2 f9 S
x=[1, 2, 3], #返回三个对象
5 R: J' T$ C, e) P, V2 ^ labels=['A', 'B', 'C'],0 P0 I) j. J1 q; ^; G+ @
colors=['#dc2624', '#2b4750', '#45a0a2'],2 L( z2 n' B+ b: I% G
autopct='%.2f%%'," U1 x( s: u. o' ]+ i% D% u, k
explode=(0.1, 0, 0))
; W* p5 v/ f+ r' R% \$ J: A2 T texts[1].set_size('20') #修改B的大小% T2 k* U2 h4 {: P$ G0 I o' B
: @" p M, O5 x #matplotlib.patches.Wedge2 b% t. R4 |" {1 v& }
patches[0].set_alpha(0.3) #A组分设置透明度# W- C; B+ i! R9 P
patches[2].set_hatch('|') #C组分添加网格线
5 J" U4 K, z4 Q0 @; [+ j' u patches[1].set_hatch('x')1 t( V& J0 E* D8 v
6 P$ F9 Z1 g" m# D# N4 @& [& I
plt.legend(7 R: t! W3 P! E) l& n* q1 `, b% x
patches,
( m2 C% q9 e" c/ Z: U) P ['A', 'B', 'C'], #添加图例
. u3 S, V# E5 d$ L4 V% i title="Pie Learning",& |( m# M( S, Q( }- n, ]
loc="center left",
0 ]8 k5 t0 p: e f$ h! F1 `! e fontsize=15,, \' E) b0 x; ^+ B5 j8 g, U* I, B& o
bbox_to_anchor=(1, 0, 0.5, 1))
- C1 h1 a4 z0 O. n- A" x7 a5 _ / k8 f& k B7 S5 g9 f1 d. k
plt.title('Lovely pie', size=20)( Q$ \: [. X* X2 k1 w
plt.show()
7 V! e- T6 W) T; u6 @% s% G/ b( b- D& _* B: o, f, r8 M: V
) {0 W1 S: J. t! ?- ?
3 h& k" P- e+ J3 K/ X9 J
Z+ W) {; F/ C9 m5 k
with plt.xkcd():
# ^+ g ~2 b: a' n from string import ascii_letters& E- T5 O4 \/ i7 U) E4 T% p' T
plt.figure(dpi=150)
5 i% l: c, t+ M; O$ N- Y patches, texts, autotexts = plt.pie(- \/ l, j: C- L- [0 j$ A w( ~. w
x=range(1, 12),
; I- s- O- d4 V4 P* V3 o labels=list(ascii_letters[26:])[0:11],
# }$ V4 F9 \: y4 M/ i- p colors=[8 u$ w. m. }6 U! H( X
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
/ W! u+ l- y3 ]/ N+ Y: G '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'# L0 g* R; A% K
],
7 ]; }$ b$ N6 o5 h0 b# } autopct='%.2f%%',: o" q/ n3 }7 E8 ?9 K
)
4 h' b4 t. b+ n plt.legend(
1 |8 C# C$ u$ H' ?3 l0 `9 I patches,
L/ j0 j8 c8 w) ~/ w list(ascii_letters[26:])[0:11], #添加图例
7 w' q, G8 R) Z& j" z1 O+ Z title="Pie Learning"," D) W4 t6 P0 T, |; u# t, \. V" G
loc="center left"," h' @6 Y0 `! X h7 \5 m$ k% I, R
bbox_to_anchor=(1, 0, 0.5, 1),
1 t7 T" }, {& \* U# U5 T ncol=2, #控制图例中按照两列显示,默认为一列显示,/ i$ r5 o' [5 V4 i: p/ z; T
)
2 x* q1 K# Y* P$ a
) {0 u5 R1 |( A* f( J7 u: b" O: Q! [% ^+ w( Y# I
7 y3 d3 N" T4 o5 H4 m) b7 ] e9 A4 j! J& u4 i9 B a: m% C% h
import matplotlib.pyplot as plt% l: j: Z b- K% ~) K, K. P
import numpy as np2 Y* }8 g# \6 O' @, M6 [5 a; X
with plt.xkcd():
) Y6 ~" y g0 k plt.figure(dpi=150)
$ H- ]0 i7 X6 |+ b! O7 U; T! L labels = ['Jack', 'Rose', 'Jimmy']3 p& |2 r" o+ F( E% u5 B
year_2019 = np.arange(1, 4)
) l9 z0 [8 L) T, Z1 c. e* J year_2020 = np.arange(1, 4) + 1" h0 B# o3 F$ [! H8 ~( n) R
bar_width = 0.4; b$ `/ z' p p9 C& t
# v m3 `1 T0 g3 q9 ~ plt.bar(
' t2 |0 U0 {4 b7 x0 l8 h) q) w np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
# Y$ x l8 d% g1 @6 e year_2019,0 Z7 k2 h* I' w8 A- N
color='#dc2624',
6 o& Y( ~! M0 _- F* V a width=bar_width,
7 g5 q; U/ e+ y5 a2 L1 N1 G label='year_2019' #图例
# E- E( ~( F4 { )
+ V2 z! T. R X" U" O' I: { plt.bar($ f% w1 v6 K: W( T& D6 I
np.arange(len(labels)) + bar_width / 2,
E- ]" R* i. ~( e year_2020,- G( ?# T5 F. L7 Y; |, A
color='#45a0a2',
# k6 g8 w4 b0 j g+ z1 d width=bar_width,
' a2 S: N% g) @* S; A+ Y5 e label='year_2020' #图例6 s' n. Q0 V2 E3 c7 ?1 @+ o% J
)
6 R, Z( U% P+ j& n plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称4 n) p& `5 y B% N
plt.legend(loc=2) #图例在左边
% p" y9 @+ d$ E# g# p以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
! y ^) G' g2 _+ `$ G2 G! S' T, C1 y E+ C0 r- S
% L E$ W7 O4 J& ?0 [* a: Q4 ?! ~* X4 H- S0 D1 N' u- y
! u; Y# C2 a; L5 }
9 x, u2 e' g. Y2 I. U
. d$ ]% N1 R1 `, I+ L以下参考: Python可视化|matplotlib10-绘制散点图scatter- q/ b. i! h8 C/ S1 |* ], l
/ U+ O$ B) }6 L* q2 K9 o# }
3 V! C# ~6 b" pimport matplotlib.pyplot as plt0 u8 D% X) A. {8 J# D' r" ]! {
import numpy as np
! m6 d1 z8 z2 b* y3 @+ Ximport pandas as pd% G" B+ K* D1 {" n$ n0 i
from pandas import Series, DataFrame. w5 K0 q" C& \# s
#数据准备
0 C/ l5 k& m1 ~/ Gfrom sklearn import datasets9 W$ M2 U- J8 E3 j
% i0 x. u5 M0 U/ \( @* U0 iiris = datasets.load_iris()
; C+ K( o- f, |1 u9 o( i9 ux, y = iris.data, iris.target
+ d( o7 U5 D/ w0 k# l4 Ypd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),1 A" Q8 @ b( x
columns=[9 ]0 P6 V' B! G- ?
'sepal length(cm)', 'sepal width(cm)',- ~# a; _7 b+ {! @* p5 k1 O3 M7 `
'petal length(cm)', 'petal width(cm)', 'class'
5 D+ l' ?6 g# i% a ])2 ?. M9 u" }- O2 n5 t
with plt.xkcd():' C1 T) W: w9 O
# |; \% Q# X) a7 o6 z2 |9 u7 L3 E* ~8 w
plt.figure(dpi=150) #设置图的分辨率
1 v: W0 O9 _+ P #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
& G, Y7 V0 v+ w b iris_type = pd_iris['class'].unique() #根据class列将点分为三类# ?" X3 W. u8 k! |6 @
iris_name = iris.target_names #获取每一类的名称8 T" E# Y; g0 i: @* q2 p- ]7 i, e
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
3 |, Z, n! W4 V A1 U( f markers = ['$\clubsuit$', '.', '+'] #三种不同图形( F, A+ [& T6 m1 ?) ~4 H* H6 ?
9 M1 j. W& h( M4 v# k( J for i in range(len(iris_type)):: `" @2 _# k3 e+ y! s
plt.scatter(0 M4 |4 c8 I! G5 J8 E+ o
pd_iris.loc[pd_iris['class'] == iris_type,, E0 H: {+ d' }+ }) {$ P* u
'sepal length(cm)'], #传入数据x# `9 a f' r, Z2 U
pd_iris.loc[pd_iris['class'] == iris_type,
$ B3 K* @+ R+ n e! n6 F 'sepal width(cm)'], #传入数据y
) C9 U& A9 C3 n' [+ r' H1 e% G s=50, #散点图形(marker)的大小 _8 n/ w! r+ P8 y: ~* H. o
c=colors, #marker颜色
5 T7 x7 n. C: o) Z- Y marker=markers, #marker形状
9 F( [. B0 `3 F9 V; B( }6 \% } #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
6 q( H5 q- C0 P6 s alpha=0.8, #marker透明度,范围为0-1
8 Z+ q& x1 J7 x facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c- o9 P8 T2 h, G" h5 {
edgecolors='none', #marker的边缘线色. W; y! X" N/ x/ X1 i6 g
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
) H4 A8 L" j* D label=iris_name) #后面图例的名称取自label# D6 g9 y- D! j6 v
4 w5 w: e$ g5 v0 u plt.legend(loc='upper right')! A" i" `3 L, `+ \7 K
) L! r0 D6 g; ]( w; l" u( ]# K* o
# F' k) j; P* a8 L; Q; _————————————————
7 z7 N+ i) c8 F# U版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 U6 Y3 H2 b4 X- Q6 Z7 b' W: b
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753; W0 {" V" g: H7 X: m. K) m
; b: q `- i1 V& m8 G* g2 A" L4 ~1 T* M ?* W
|
zan
|