- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565364 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174832
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
4 Y, D/ l6 G9 i
一行Python代码有多强,可让图形秒变「手绘风」- y- O, Z7 ]( {- x. @5 U) C
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具% B* J& w9 f! b4 H7 b$ P K% j
9 m$ u; t( D8 m+ S6 ^5 b' ~( D' K2 d- u
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。7 A" }7 T& }7 i* [5 [) W7 C* q1 ?2 V
; d3 Z5 t5 h/ F9 B* P; e! Z& l
' N- z' p9 E3 J- E Rmatplotlib.pyplot.xkcd()简介
8 F' i# j0 } q( C这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
% O" j: g4 y- b! ~( {, ]+ d$ I" G* ?- C& |" A
$ t7 Z) c. W4 N- ~. \$ h8 y" umatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
, p; m9 k- I0 i! W2 D length=100, #褶皱长度
2 }5 A$ w9 M2 W% g% h; ^* v$ A randomness=2#褶皱的随机性0 Q: f9 K( _9 x& Z$ W* u* c
)& {, w* w0 r0 Q( Z- B" t# N) E$ Q
matplotlib.pyplot.xkcd()使用
7 L: H& Q7 z: X9 Q如下,加with行代码即可,括号中参数按个人喜好决定是否设置~% X; g1 _: j; q
8 L% F# K# b0 Y& H+ n U, e6 [1 N4 C
with plt.xkcd(scale=1, length=100, randomness=2):7 h1 P. I" \$ @" j |7 x
#with是临时使用一下,不影响其它图使用正常样式
3 L: L2 O3 E+ O3 ~2 X& q# x$ p 绘图代码
( E' I) T6 g7 b3 |( a 。。。。。。$ b" A: d" f* Q+ T
plt.show()
2 P P6 i% @7 y5 }4 {, R- M" Nmatplotlib.pyplot.xkcd()使用实例
1 v: \6 F' o$ J Y下面代码为pythonic生物人公众号之前的文章代码0 d3 _& c O+ T2 x O
8 ~3 w/ B @4 y* _5 ~
s4 E `: V2 |; q
以下参考:Python可视化25|seaborn绘制矩阵图6 a s: M3 @5 [3 o) k: g* p
' H. N* w/ M5 { }' A! H. D0 e
4 L3 d$ b c' R9 W) R2 b' g" ^ U
#支持seaborn1 G0 U6 I+ ^- m* s# L! Y) V8 V+ ^
import seaborn as sns# e2 _) t4 B( o# W
iris_sns = sns.load_dataset("iris")
: y6 Q4 y, M7 _- o+ d5 D6 vwith plt.xkcd():( x `( t2 Z; O4 D
g = sns.pairplot(8 r' R' v; Y, D) X; l# a+ _
iris_sns,$ b5 U: r, J( ? b
hue='species', #按照三种花分类1 s8 V$ k+ v* q! O6 |
palette=['#dc2624', '#2b4750', '#45a0a2'])
% M$ }" o+ z/ i/ J1 _8 H sns.set(style='whitegrid')" M) Z3 o8 `+ ]2 o2 D
g.fig.set_size_inches(12, 12)
- q; p ^4 D+ _ O+ L3 | sns.set(style='whitegrid', font_scale=1.5)
; k5 u% x' R& L. n8 m' X 6 f3 @) d) w3 C
% _1 X% f L$ {, d8 [' g. c
+ R* G9 [3 g, c, j* j' ]以下参考:Python可视化29|matplotlib-饼图(pie) 3 j. Y& e) Q! C, E! {! `
* i+ c) ]0 n7 `9 q7 m
% T6 Q; y, ~8 K% O. Q9 A1 Himport matplotlib.pyplot as plt c2 T: s- h5 D- H$ v+ `/ O
with plt.xkcd(
# u5 y# A, @/ ~4 `, f scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
( p9 `8 m( H- W( b& K0 ] length=120, #褶皱长度" Q! [, o4 N7 {- m/ d9 D
randomness=2): #褶皱的随机性7 w0 p/ A* G4 x, l A; d Q
plt.figure(dpi=150)
0 s' M2 @# Y$ i0 f M& \+ B patches, texts, autotexts = plt.pie(
: r6 e4 M9 ]0 w" N5 e) B x=[1, 2, 3], #返回三个对象
8 K6 l& [# l; N! T) ] labels=['A', 'B', 'C'],
0 Y0 }' U0 n. W P colors=['#dc2624', '#2b4750', '#45a0a2'],
6 x& ~8 U9 @- Y T* S2 \9 e, C6 p autopct='%.2f%%',1 K2 P0 f# C8 `" w& ?
explode=(0.1, 0, 0))
0 A% n ^% I2 o. _% _7 Y: n8 ` texts[1].set_size('20') #修改B的大小+ K7 x3 x f) P8 b5 W$ z9 r: C+ z
( Q o3 a: w5 y4 f5 @! E
#matplotlib.patches.Wedge' N' M- F4 O- M6 Z
patches[0].set_alpha(0.3) #A组分设置透明度
Y) [& {9 V s$ Z: U7 _ patches[2].set_hatch('|') #C组分添加网格线
% X8 S! B( E+ L' D patches[1].set_hatch('x')7 i; w+ `% F# J; ?
. ]4 e! m: t3 n6 j- W% C plt.legend(
* D3 q, T1 x- b8 {4 w. Q patches,5 Q9 b# M% n9 |7 @1 t% t
['A', 'B', 'C'], #添加图例- }; Z) P* `: D3 D2 I- l- J
title="Pie Learning",! p0 G9 J, t: a* d
loc="center left", c7 J# ~7 p |' c& L+ z
fontsize=15,) \" \$ c5 q* O* p: e& b- U
bbox_to_anchor=(1, 0, 0.5, 1))4 t& |2 q6 s% y
* L# m: n, x2 d, B2 F Q" q \5 r
plt.title('Lovely pie', size=20)( e. d2 r) K& E q+ x5 H
plt.show()* X8 t# V2 c3 q! N
9 b, U1 z# j# f8 Y& T
3 i5 z9 x/ J' {6 w& ?/ ~8 s3 C i/ D& ?+ G+ I, v# f) H3 U& w# g- M# U
4 V( @5 D* M% R; \with plt.xkcd():
- u; L" Q! f; L/ a% L# {6 u from string import ascii_letters
R& Q' W" N0 ~% P( a }5 \+ _2 [ plt.figure(dpi=150)4 H% w% ^- U( B# q3 O
patches, texts, autotexts = plt.pie(' J' y V0 f/ r% M1 Y$ ~& ~7 H
x=range(1, 12),
% c4 O% j; J% S2 S labels=list(ascii_letters[26:])[0:11],
, A, K' Z; _& n, n# Y4 } colors=[
4 O! M! k1 a$ F( p+ @- O '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',9 d3 k3 ^* c9 D
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
2 z/ ?+ F$ t: h/ ^/ m7 V( h- r# _ ],
- v! a6 v* L1 @/ v/ C$ p, t5 b1 M autopct='%.2f%%',
: d/ _% ]( b1 q! T- K/ H6 J )
w+ P4 @7 ]& p" R plt.legend(& {( x+ I. z2 X7 Q
patches,
% D* z0 `7 U7 }6 i6 O) ]5 P list(ascii_letters[26:])[0:11], #添加图例
) H, Y) v1 j, B" x title="Pie Learning",0 |0 `) v' [! t0 T0 X
loc="center left",
* v% S& J% \: t+ h6 T+ J7 A bbox_to_anchor=(1, 0, 0.5, 1),2 [) x/ }1 I; | r
ncol=2, #控制图例中按照两列显示,默认为一列显示,
2 `7 R0 K2 p, z( a )
6 S3 p& j* I o/ X) T/ o4 }# Z l. z, f/ E* @+ A5 d4 \1 B ~
+ ?; g3 c5 t. j- z. B/ }
* C; t j( y( y/ m
8 n) p- \( ?$ p- |) C7 Z* Cimport matplotlib.pyplot as plt
1 v1 ?6 O& U0 p+ I' O, Himport numpy as np8 T; |: C1 `2 f3 C( c1 ~
with plt.xkcd():
7 m1 ^- Y3 |; D; E3 b3 m, j' [ plt.figure(dpi=150)
" u, v9 H( _) W! O/ ^2 `7 K& X$ @ labels = ['Jack', 'Rose', 'Jimmy']% z+ m1 B2 w2 i. `
year_2019 = np.arange(1, 4)
) t/ a I! V0 \! ?: U year_2020 = np.arange(1, 4) + 1
E8 \3 W9 e3 V; y M& f bar_width = 0.41 \( T: Y2 o3 P9 X
5 G- P* z, b. z0 X
plt.bar(- S# }! X7 C/ o( m* c
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽& R4 w$ `9 {3 J4 P( F
year_2019,
) n( B K! H. t M: I) _/ W% ~7 { color='#dc2624',
" I$ Q x+ x- E- ^9 M+ d width=bar_width,3 m5 d1 E5 A2 A* _
label='year_2019' #图例
b- y b. n; F+ u- a ) H t5 N3 y; O! s) L% `; H
plt.bar(
: ]& N3 D N) R3 R+ n% K np.arange(len(labels)) + bar_width / 2,
; ]0 Y, F( B6 u! U3 d year_2020,
2 v; Y: Q+ O$ m0 a: _- i- ` color='#45a0a2',+ O/ I4 o& G: A. a+ |- ?& ~
width=bar_width,# c7 P( o7 P# d: y! }# i) s$ J
label='year_2020' #图例! A3 H' r5 X5 j: G! H
)
( x" N+ x3 p) d& ?! S% ~ plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称, r% Y% w- z9 N% t, K- v
plt.legend(loc=2) #图例在左边: g$ j5 ~: V7 X/ z& r
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 * T6 |5 ?4 M0 S2 P+ F4 K
2 U& [9 q' k9 |, b. w* I7 q+ K
3 a' m* M3 x$ }6 ~4 C3 R$ D
Q# I# v% G7 E$ C. e, m6 C4 K5 a: L$ Q( r2 F) |) G& | z
- }; ]9 w$ q4 m4 J' f0 ?
5 Z3 w6 n5 y+ P9 o/ C3 \以下参考: Python可视化|matplotlib10-绘制散点图scatter9 N* g! d) \) {# x. d- d. O
& {$ ^' O7 O, N/ S; T* l @9 W6 Y$ G7 I
$ d# \$ q. @" W o% @ E
import matplotlib.pyplot as plt
. [" D) v: w9 H8 P n. Jimport numpy as np
" ]5 V o7 O3 K% gimport pandas as pd! u" g3 t- T6 w! i% [) F c( G" j
from pandas import Series, DataFrame5 N0 ?, i1 @2 a0 u7 G' @! ]' W/ o
#数据准备
" O' H5 j! y. B, kfrom sklearn import datasets
9 |9 D/ m9 c4 j" l* }- [ e 9 v8 e/ f, A4 Y# l! Y7 t' E
iris = datasets.load_iris()
" |9 z( j0 c0 j. a1 @! b4 Cx, y = iris.data, iris.target
5 K2 @) a& {+ l# ?5 Z( @- xpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
, s& L5 t6 w. k5 u' @* j% p0 } columns=[0 Q9 O% c, e1 }# c9 |' _/ @
'sepal length(cm)', 'sepal width(cm)',
0 \/ w) D3 R! q' n1 Z 'petal length(cm)', 'petal width(cm)', 'class'
+ u8 l# O5 \: g ])
# H' @, h0 E! N* j+ C6 w* U( Kwith plt.xkcd():
w: V9 T# g$ ?+ ^7 u8 m; @) {" g $ D/ w4 Y* F' A7 H0 K0 j
plt.figure(dpi=150) #设置图的分辨率$ C: O8 V& [ m8 ?8 `, K( N
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
# B8 T: g- e1 z# s! q iris_type = pd_iris['class'].unique() #根据class列将点分为三类, |( a8 C% i. `6 n* F G# h" S
iris_name = iris.target_names #获取每一类的名称
" B7 y$ E2 O" d( ?# B; U) {* H2 `1 W colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
" `5 Z3 C" v7 o1 Q3 @/ H. O4 g markers = ['$\clubsuit$', '.', '+'] #三种不同图形
. o6 O: D" F+ s9 ?" O, P
2 Q0 i' L$ Y& a' ~* f& E* s# C* U/ } for i in range(len(iris_type)):
# q! u. D6 u, f6 X/ f% u) f" w plt.scatter(
* y7 u/ l7 L9 }$ a pd_iris.loc[pd_iris['class'] == iris_type,9 `9 i F$ D% _
'sepal length(cm)'], #传入数据x
" y. W: S% u4 Q pd_iris.loc[pd_iris['class'] == iris_type,
, V0 L8 y2 Y& A9 @ 'sepal width(cm)'], #传入数据y
# m0 z' k% ?! I% V5 _ s=50, #散点图形(marker)的大小
6 z# Q* Z/ ~$ `) Q* Z c=colors, #marker颜色
' G n+ l" z* `! c- X' \2 D5 e: P marker=markers, #marker形状% k- o$ V$ j# b- p) U
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充 w; R% j ]6 T* D1 Q( S7 k, _
alpha=0.8, #marker透明度,范围为0-1
. z6 N* I, @) g+ y/ z facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c. O" B8 |, O0 _5 _$ S8 q
edgecolors='none', #marker的边缘线色9 G, N a- b5 f U: n7 Y
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
) t5 m% X1 N$ s' _4 u0 N* D label=iris_name) #后面图例的名称取自label
$ l. D% ~# s" P0 }4 }/ c
4 r! X5 A3 t" E" t8 w plt.legend(loc='upper right')
- d: f- _+ \( O/ @
! n& k9 `$ \3 a$ r
& S3 X2 u) z/ P( O; l; F" E( j8 w————————————————' [, T' B; |% G! G: \5 Q! ~$ O& F2 [* h
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
6 s; q4 G1 O+ h( A- `2 u C/ v: |原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753) Z+ `9 {1 Z9 c6 {" I
' Z, Y. _. x7 k5 w$ J2 W$ Y- l
$ r6 k; G! M5 I; y4 e. L9 Z5 j0 T/ f |
zan
|