- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565360 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174831
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
i* l5 m; W# N$ y1 W$ h
一行Python代码有多强,可让图形秒变「手绘风」' p5 c; F- b( ^7 M7 R
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
- R$ G t( R8 o8 K6 _( ~5 r J- R- `* L5 U
* N' C% V" Z. e+ p0 ]
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。4 A* z2 W8 Y6 T' T4 |8 V; g
" F7 F4 I4 S! w! a; g. Q5 t
& F9 W) `: `% ]* O( K
matplotlib.pyplot.xkcd()简介( _6 Z* K- w6 i6 R6 O( p ~2 U
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
4 d7 a. \6 X$ q c" G
; [/ ?& x, Q8 x0 ^& s# h
3 z& K& i8 X+ L6 w! \9 }$ cmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度: [# C0 W& O7 c) ?
length=100, #褶皱长度
& O9 b( p$ [5 c& Y7 \/ b2 k randomness=2#褶皱的随机性
3 w( H2 K# q# c+ C1 _4 Z, ]1 I )/ \+ ?' Z9 p5 X, J# W1 s* g+ f" F
matplotlib.pyplot.xkcd()使用
$ _" J1 E) [5 v5 E2 A如下,加with行代码即可,括号中参数按个人喜好决定是否设置~+ R/ i+ o( `* ~# G) T
8 F2 p- {, ]1 J6 Z0 P
' ^: H4 E9 m: I* i' i+ P
with plt.xkcd(scale=1, length=100, randomness=2):7 L$ ^$ |3 W2 d3 j6 |. W
#with是临时使用一下,不影响其它图使用正常样式5 R* ]9 y) J2 K+ o3 u/ j0 K! O
绘图代码
+ \4 t% h# D g3 g/ I 。。。。。。" ]# p; a. Z3 N+ H' [
plt.show(). a; N$ _' k2 s' a) X7 L# d% m. j
matplotlib.pyplot.xkcd()使用实例 6 Y6 C; t4 \8 M. M
下面代码为pythonic生物人公众号之前的文章代码
- S" p* a1 w0 ~; v: j$ l0 ?* R( O" R. [! g. J2 |' }- `8 W
6 j6 A/ L) w3 r2 O; V以下参考:Python可视化25|seaborn绘制矩阵图- l' R3 m" `+ ^
# c$ ^. ^# x9 v4 U
& Q# z& N3 H+ x! b! R! }#支持seaborn
" W& X6 H2 J) e; b8 h1 b* bimport seaborn as sns) y5 ^6 W7 h( L* g% R
iris_sns = sns.load_dataset("iris")
( H& f2 p! E; l, V B5 X" qwith plt.xkcd():" ]3 N7 L; y6 R; W: {# c& s
g = sns.pairplot($ i% C2 y! f3 B4 F. t: z4 }
iris_sns,
6 A, {) ^* H1 L4 t- }/ |9 Q hue='species', #按照三种花分类
/ D Y. G& q/ M; J+ H1 ~! u palette=['#dc2624', '#2b4750', '#45a0a2']). Z: M( f8 A% ^4 U9 b( ]
sns.set(style='whitegrid')! p/ I$ W" q- r) k" v
g.fig.set_size_inches(12, 12)
/ V0 ~7 \5 q7 {7 v sns.set(style='whitegrid', font_scale=1.5)
3 h, ^0 w- M9 a
0 t( w7 B, y3 l! ?! @- P+ u' v) O1 i3 r) G+ f! B
2 A$ ^. E$ L& \% M$ c3 e$ n以下参考:Python可视化29|matplotlib-饼图(pie) ( r7 q' R% n: ` ?+ Z
/ X- K1 W6 X% ~! Q, R* V
: k4 T# k" J4 H1 [import matplotlib.pyplot as plt" s0 K1 E" g: \' F3 s: [
with plt.xkcd(- t. g/ L5 Y. H% w8 }
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度; G# g/ W8 h4 e3 b' k9 A" r
length=120, #褶皱长度. R! U3 J# ~" \5 R& ~
randomness=2): #褶皱的随机性9 @' D* e7 N: ]$ s5 A% c
plt.figure(dpi=150)
- f- f. m8 o3 i* J$ I patches, texts, autotexts = plt.pie(
/ w2 K7 c. j* h+ Z" F x=[1, 2, 3], #返回三个对象! r I9 [+ [7 L1 M
labels=['A', 'B', 'C'],6 u1 P0 L8 t0 b3 T4 W L
colors=['#dc2624', '#2b4750', '#45a0a2'],' J: T ]% u1 \8 M- k
autopct='%.2f%%',
' O6 P; k( o" n9 n7 |/ Z explode=(0.1, 0, 0))
* j% t1 F! b A, T- ~1 [ texts[1].set_size('20') #修改B的大小
; u# b1 q- T, l7 A9 O* u: q
# c- Y; M3 Z$ q/ ^9 ]1 P #matplotlib.patches.Wedge
9 y7 D- } ?+ V& L3 r' e) K! E patches[0].set_alpha(0.3) #A组分设置透明度
4 _" M& |8 w/ W0 C7 \ patches[2].set_hatch('|') #C组分添加网格线
% c9 H5 X7 y- U3 p" [2 ] patches[1].set_hatch('x')
) g1 k% d0 F( i/ D. h5 V9 `
C" e% Z; h; W& a4 F1 W9 ] plt.legend(
6 f! ^: a2 R+ G* v patches,
* @, M6 R% P+ J2 ^3 S' V4 u7 M6 { ['A', 'B', 'C'], #添加图例, u! H5 ~7 Z: P, X M% p
title="Pie Learning",
4 H& Q7 ]( s$ ~* l loc="center left",
4 s0 S8 n9 C y# i% G, b fontsize=15,
2 k9 \9 m6 T8 |& Y! @! {( @ bbox_to_anchor=(1, 0, 0.5, 1))
; _9 S; T4 Z, ^$ f$ c( w
3 o8 W* c. Y- K/ @) ?9 [! I: B, B plt.title('Lovely pie', size=20)
0 x/ x2 O5 V, B: b7 J+ [. g7 X: v) V plt.show()" C/ B+ F+ P2 _" L# u8 ]! k
; Y$ R1 ?$ q2 R5 ~
" m# ?9 ~( K: ?6 V; c$ }
) p ?- G% r9 ~( T. _$ Y6 _% a @1 J% N& H5 r
with plt.xkcd():
* l/ v' ]* Z% `/ v/ ^6 F from string import ascii_letters, H6 |# ]* \4 u6 |
plt.figure(dpi=150)
3 G( d$ d8 K7 _9 V& B* p patches, texts, autotexts = plt.pie(
7 T1 J4 ~0 L4 g4 [: E# j% l x=range(1, 12),1 E% T; N2 M5 i2 B
labels=list(ascii_letters[26:])[0:11],
% t4 t4 l0 e' o4 E+ _! M: { colors=[8 h+ R+ b1 B5 p% o/ N
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',9 W" [; T9 j& L: V! g& z/ Z
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'+ N* _0 ^ |( J1 A; Z( I+ O
],' M2 Y9 i' H' C, R$ \# i" S7 F
autopct='%.2f%%',
! [& g; p5 I3 s% k4 y8 R7 |' H2 W6 { )
/ v; a6 F/ B' X; d2 ?" v( X F8 h plt.legend(
+ [4 W+ i+ W* _ patches,& J& ?/ \0 b6 k5 M1 i0 r" W/ @5 t# F$ `
list(ascii_letters[26:])[0:11], #添加图例, Y! v+ q$ b$ G3 S5 L
title="Pie Learning",+ n! X1 s& P. @' v! E1 Y) y
loc="center left",: `* u" C. N9 e L/ w
bbox_to_anchor=(1, 0, 0.5, 1),
+ l0 s5 O q* m3 q8 a+ |$ f ncol=2, #控制图例中按照两列显示,默认为一列显示,
) n- c6 U9 u1 O! {% Q7 l6 D )
* p8 `0 {5 t6 |6 {# t" D& L2 @% q! B/ d+ A
. T; ~1 W. G% E
6 h3 E' k7 T$ h( U- d/ }0 e
5 y+ `9 K+ w$ @& M/ Q( U6 F5 Zimport matplotlib.pyplot as plt7 C& X; u# r" j, o5 T
import numpy as np
- l+ m9 x6 O2 ~with plt.xkcd():
h. H! V8 l8 f) F- q plt.figure(dpi=150)
1 O6 _, \1 J; V' A labels = ['Jack', 'Rose', 'Jimmy']9 g/ [+ x) N; ?* E4 U
year_2019 = np.arange(1, 4); w* y: V6 e; @( ~; P( E
year_2020 = np.arange(1, 4) + 1
+ p A2 Q% T* T bar_width = 0.46 }1 a, ?& `6 P$ O
* u5 Q5 z) ], G+ d
plt.bar(: V/ b& q7 C* I% C7 B! \% O
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
+ c6 ^5 a+ J, c) I0 P; @& s year_2019,8 l! q9 C* h3 y
color='#dc2624',
5 t$ J0 M( k/ Q8 D9 ^ width=bar_width,
1 g7 J% A, o' }4 t% \; Z label='year_2019' #图例
* A/ W5 O4 d0 N )" d9 o$ Z7 C" B9 f; c9 Y0 O9 R
plt.bar(
% G6 U) G# ~5 r A( z# ?9 U np.arange(len(labels)) + bar_width / 2,8 p! Z; Z; `. s$ Q: b( X& x1 ]
year_2020,. [7 o' _! ]& B" U4 Z/ H! p, {* E
color='#45a0a2'," i% k. x$ J$ E- U0 J1 W8 N
width=bar_width,: Q, t3 ]% L( V& `- E, j
label='year_2020' #图例$ Q8 }% u4 N4 W; {/ k1 I1 d3 D
)
6 ~6 o0 W4 E5 G' z% h plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称. e5 P$ e9 @. R* x) }
plt.legend(loc=2) #图例在左边
1 t; D2 E, \2 a4 F: O以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 - P1 Z6 v: z$ c) e
3 F! S% f$ I, m1 s6 M e8 O, ^
5 M- Q9 }* I. n, }) D+ ]+ M- U- L+ k* I3 H: \2 Z. ?, s
5 N+ \4 G$ i/ S) R) D3 p
8 W0 C$ d( E P* E) [
& H; L+ C4 d; t# h. o" _以下参考: Python可视化|matplotlib10-绘制散点图scatter
4 B- l7 o; B2 u& T. d) E: N* r* A( ~& h) Y o- N
# e; i* p1 N$ N4 ^2 t6 N' j
import matplotlib.pyplot as plt9 @+ T% [4 D4 R1 p6 l' Q
import numpy as np
: x, `, R( |$ C- T! w7 {0 f0 _) pimport pandas as pd
7 i0 Z! I& r% f. g/ dfrom pandas import Series, DataFrame- w4 r+ P3 k* H: \3 C
#数据准备
2 O8 ^8 f6 ]0 Ffrom sklearn import datasets
2 O+ p+ v2 o7 L9 q+ ]; Z! u6 s
! O( a5 l" q! H/ D; miris = datasets.load_iris()* x" y4 x7 S6 f& E
x, y = iris.data, iris.target& Y+ Y8 K4 O6 x: n+ U
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),0 C; U) u) s& B) S) m2 {5 L
columns=[ A0 }$ O C+ e3 K
'sepal length(cm)', 'sepal width(cm)',. n: n6 i1 F2 \. o% w: U
'petal length(cm)', 'petal width(cm)', 'class'$ V2 h2 m& N+ v0 O( x
])
; u1 U0 F6 C& ^# C* d' [with plt.xkcd():
$ c1 m Z# M) r, q# d " ]4 N( f! ?$ w9 e0 I5 S- J8 K
plt.figure(dpi=150) #设置图的分辨率& ]. F* }2 I. d7 _ B& |
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图0 o: L( j5 d4 F. e( c3 C9 g+ |2 Z
iris_type = pd_iris['class'].unique() #根据class列将点分为三类
) N% X- O- A9 m9 L" F! `: o iris_name = iris.target_names #获取每一类的名称
( ^' T: ^& P; M$ z5 { colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色8 a9 f# G% U' O
markers = ['$\clubsuit$', '.', '+'] #三种不同图形9 t7 r4 B& A' S) M" U6 {' [' O
7 A; h, H5 D' ]8 ?8 r" g8 L6 @4 u for i in range(len(iris_type)):
7 q/ p4 C0 o( Q* G! \: O plt.scatter(
& w1 E b1 a% i pd_iris.loc[pd_iris['class'] == iris_type,
8 {9 ?$ g6 H1 j, T6 L! ] F 'sepal length(cm)'], #传入数据x" s" D7 ~' U6 f2 b! ?- o5 H
pd_iris.loc[pd_iris['class'] == iris_type,; |+ W; Z4 w- k
'sepal width(cm)'], #传入数据y+ b; r' p L" t! g: o
s=50, #散点图形(marker)的大小0 s% @0 q; h, k$ E2 u
c=colors, #marker颜色9 v/ `) A. m! F6 N3 f2 G
marker=markers, #marker形状7 u! k0 n5 c) V: D% V! O" d
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
6 m$ v& e" x h/ ` alpha=0.8, #marker透明度,范围为0-1
# S* k6 f4 n; R& X/ h, k0 L8 l facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
* B2 o1 n# r' @ edgecolors='none', #marker的边缘线色
6 Z) ?0 R0 N3 ]; x linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
+ J1 B3 e. I1 G6 C w/ u U label=iris_name) #后面图例的名称取自label% h/ k$ `1 Z# {) s) \
7 q# I- ^3 x2 L& I2 A plt.legend(loc='upper right')
' }$ B' a5 W. } S1 P2 {! R6 I) g( g0 F7 L! f `, b
4 A2 {: }/ }( J8 n7 H
————————————————+ e5 c6 E- P& |( M: H
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( r" H, j( Y5 e
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753* Z/ e) q$ a& S4 b+ i- I0 L
( Y {, z( p+ H2 q/ o3 F. W- d: N% P1 e4 p3 N& A6 p, D$ d& A7 @/ P
|
zan
|