在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 566453 点 威望 12 点 阅读权限 255 积分 175159 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
6 R7 G1 {. Q& q4 A3 w 一行Python代码有多强,可让图形秒变「手绘风」 * _; B7 P y0 {+ O# ~& e' l
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
4 b+ z s7 l0 k$ t) M: h T. ? $ N; W+ D- s" R& _, ]) L5 Q7 d9 `% e
3 W1 v' m9 F. \5 w9 u, a7 F 但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
! m3 v4 C$ [' |0 t; K ' _- p% y- J# A v
) t! h L! h( ?& u/ g3 b matplotlib.pyplot.xkcd()简介 - y" [; `4 b2 F4 d& n
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
% F+ L: U( G, R, S' w3 I3 d, E
" J+ t' G* c8 g. i 6 a/ S: A, E5 j k
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
2 Q& ^, P% R) K% W1 i- K length=100, #褶皱长度
* n; b6 w3 e# }1 o+ K8 P. e randomness=2#褶皱的随机性
. g) w; l1 \% D j, b ) v0 n6 `' c# \: E7 l& f1 r
matplotlib.pyplot.xkcd()使用
* p: C3 ~2 C `6 q4 [& _2 S+ V5 B) u 如下,加with行代码即可,括号中参数按个人喜好决定是否设置~ ' q M% ?5 i: y
6 ?' ]: B0 C/ p ~" o/ w
: C0 o* x6 [& v% I$ A with plt.xkcd(scale=1, length=100, randomness=2): . r% t% C" p; h
#with是临时使用一下,不影响其它图使用正常样式 3 i6 ]: k4 ~& M6 E
绘图代码 " d$ \+ b; O+ C# n
。。。。。。
0 X! ~8 t! k3 L9 N9 R" J% C plt.show()
. y6 L, `4 M. A6 I( t matplotlib.pyplot.xkcd()使用实例
# s# K `6 z$ ~! v6 m3 k& |+ @ 下面代码为pythonic生物人公众号之前的文章代码
' y% c! `$ {2 M+ d0 ^0 H * [) z0 A B2 @) B8 f3 |9 ]
9 A; p3 ?& E; v0 R! x
以下参考:Python可视化25|seaborn绘制矩阵图 / ]2 {' @" G% j0 A0 S. B! J2 E& x
( x3 B6 w: w' u! [8 O' t7 @
( _, u/ h3 j2 F. `2 V! I- {7 N3 M# C) [ #支持seaborn + v# H+ [! z& D. v# k: s3 q
import seaborn as sns + P5 m. v" m p/ W
iris_sns = sns.load_dataset("iris") 9 V; ~1 {4 y8 s' U: E2 ~. O
with plt.xkcd(): ! ]6 N7 c+ Y& i& X# E J% O
g = sns.pairplot( - h0 K' }& v! m% Y; h; ^4 Z
iris_sns, % ~9 J8 T0 U& U3 N
hue='species', #按照三种花分类
* @+ h5 T& g' u/ b; l; u: F palette=['#dc2624', '#2b4750', '#45a0a2'])
8 a* ^# f r6 b9 W' q sns.set(style='whitegrid')
! n) }' P& L" G1 N8 a7 X g.fig.set_size_inches(12, 12) 5 X0 \0 q' ~' ~/ [% c `- c4 m. v
sns.set(style='whitegrid', font_scale=1.5)
8 L, w( J# r& ` ( Y/ G7 c6 S1 |6 l5 Y! x
|. d5 k, b2 b* n
2 c3 s# @& y0 X# I 以下参考:Python可视化29|matplotlib-饼图(pie) & G" H3 p) E* ^ z* K
8 N, Y7 y3 k3 ~
K3 p# e* S v5 o: g+ h3 O5 i; h. p import matplotlib.pyplot as plt
$ k; ~& T) j3 m) p. O with plt.xkcd(
2 M8 r9 _9 ?1 k4 m' O scale=4, #相对于不使用xkcd的风格图,褶皱的幅度 + W, G7 \: j& q9 i" e, k
length=120, #褶皱长度
% y Y; q: ^6 Q0 Y9 W4 r randomness=2): #褶皱的随机性 1 s- N$ G2 f3 |" ^
plt.figure(dpi=150)
, I2 A. R4 f7 [# D- g& a% c patches, texts, autotexts = plt.pie( & d( @) K' X7 L6 l
x=[1, 2, 3], #返回三个对象 & a6 S4 T9 `0 G
labels=['A', 'B', 'C'],
. x: O1 [4 i# A: \# d" S colors=['#dc2624', '#2b4750', '#45a0a2'], ; I; Q5 B: U# W6 q
autopct='%.2f%%', 5 Q& n0 H. T' x
explode=(0.1, 0, 0)) 0 U$ n, w3 ~& `& ]
texts[1].set_size('20') #修改B的大小 ) h/ l6 n" f/ p: R( J9 i
" d: N4 w, g! c; o #matplotlib.patches.Wedge
6 b6 I+ N1 }, G1 t) |0 e( | patches[0].set_alpha(0.3) #A组分设置透明度 6 _1 ^" s: x7 o* ^7 Z( q5 Y
patches[2].set_hatch('|') #C组分添加网格线 8 M l+ y: F, M# d' R- y
patches[1].set_hatch('x') & W' d1 g4 O" `
- T* _& V% }3 [' w# P H4 c; C A plt.legend(
$ u- t* V. l% \& R patches, 9 {9 F- u# V" A3 Z( d9 i( I2 O
['A', 'B', 'C'], #添加图例
* I8 v6 N+ F1 r; _ title="Pie Learning", % [0 Q; `: N9 \; p
loc="center left", 7 q/ c+ }) P7 v) [! W' X
fontsize=15,
* e! p5 v6 P/ t2 X bbox_to_anchor=(1, 0, 0.5, 1)) : f/ r3 d! c; z) _# w5 J
0 |; N( f8 F$ _4 R2 L o# k
plt.title('Lovely pie', size=20) ' Q0 V+ l: M; Q s4 ?# O0 l
plt.show()
, R8 b- V2 U# H$ o
* L" K2 W. ?3 U' E D3 s) P$ T 4 V0 ?$ T- O U. H% _+ w# N
9 w' A3 k7 Q5 y7 s3 J
( W$ P; y. \2 n with plt.xkcd(): 2 F' K( W0 W- D) X
from string import ascii_letters
0 O* r4 B; b0 P+ r5 x) L plt.figure(dpi=150)
! j5 a- ~3 @0 O h& L% |6 y patches, texts, autotexts = plt.pie(
7 c! c3 y! K% `( t+ t x=range(1, 12),
f4 D+ s1 A+ r8 n) Z+ u$ ^1 U labels=list(ascii_letters[26:])[0:11],
) s& |0 B3 m# |* ?1 ?3 I6 y colors=[ / r$ v7 y' F0 L& S z0 P
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D', ( h$ n$ {# N% U5 h( D
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf' + j7 {5 T! w" @5 u, q( E
], & u, C1 m3 F0 s6 z" U5 w
autopct='%.2f%%',
& Z- Z# n9 d, _& n6 {0 W8 { ) $ G2 g4 a- j+ |6 E! u3 J
plt.legend(
7 ~* J( c% Q1 B) o( b. f. ] patches, ! ~. W. ?1 N- K0 o- M1 s
list(ascii_letters[26:])[0:11], #添加图例
6 F8 x; e$ j, F0 _ title="Pie Learning", 5 y7 r- V2 P4 A4 b8 C* v
loc="center left", / B4 r# @ S& o" `/ J
bbox_to_anchor=(1, 0, 0.5, 1), & f) J8 J/ T( Z9 a
ncol=2, #控制图例中按照两列显示,默认为一列显示, ) l \8 H) H: {- g
)
; I9 {7 D# ~2 ]+ ^# U; f" N
: {4 Q0 \, `" i2 r3 O/ s0 b y
8 K' U/ s& q( C- o8 | 5 ^4 P+ a) e% T* }7 P$ c1 i, _
6 ^, B, _% i p import matplotlib.pyplot as plt 6 m' P! N, i" v2 z
import numpy as np * Y8 u- U6 _6 j5 X7 A) T1 x
with plt.xkcd():
?; U& d0 |8 Y+ l- z& H& U4 z plt.figure(dpi=150) ! x0 Q( ?' Z2 E' L3 a$ {; Q
labels = ['Jack', 'Rose', 'Jimmy'] ) a, e8 n! S7 w' O; Z7 c
year_2019 = np.arange(1, 4)
/ |; K/ E6 Y) Y! @: f year_2020 = np.arange(1, 4) + 1
+ h8 _& R6 V3 M6 O bar_width = 0.4
+ H6 q" K( T: z. [4 i ! X$ ~* g: h4 `% r+ K( Q5 t7 _
plt.bar( 1 }8 A5 [ v4 z( \; D
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
, |# o( q- a5 f year_2019, 4 `, v$ M# B* E( J
color='#dc2624', & n' t' ]" d+ I0 G3 i& E/ v
width=bar_width,
6 `* Z: k, S$ h1 L4 R label='year_2019' #图例
/ c4 l# B* M- u! C ) / U0 c8 b5 ~# x+ I& c) `! r
plt.bar( 1 c8 M: ]% h2 l3 G; U
np.arange(len(labels)) + bar_width / 2,
6 u3 z- H0 R* j5 C) L6 O* G, V: y year_2020, ) y1 U# B; _0 R2 |8 m+ w
color='#45a0a2', 4 {' n- X* N2 H0 n
width=bar_width, ( t2 L4 C J, {, F: j e
label='year_2020' #图例 $ j& }8 A* j$ P+ Y! \. ^/ G' }9 B
) ' L) s; P1 W4 f1 L: B
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称 ! o3 M9 H. I9 ~/ j) _
plt.legend(loc=2) #图例在左边 $ a5 ], G c# h8 b7 k
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 ! L( Q9 y: p8 l) t5 f; a
8 f, {4 h9 A3 G; f
5 {" b; k- c/ W" A. z- {% n8 e
" h: m" D4 y5 \
0 Q3 n6 F) u/ [, L5 ]
: X: q1 v" u! `, J) }- |
8 l w: n& Q( M 以下参考: Python可视化|matplotlib10-绘制散点图scatter 3 h% ?, I6 d' e7 S6 l/ I* w
: I& l$ `* ?' u. B2 T8 k/ _
9 I5 {1 Y" s4 K* j! n. I. ~/ L+ [
import matplotlib.pyplot as plt + |- B A7 T# `# k6 a ^% S
import numpy as np
3 j% R2 h* N% Q# C5 i8 N import pandas as pd
9 g* M: A( y- c' O3 z0 u4 } from pandas import Series, DataFrame
" f2 w. b1 ~, U& N, _( \$ W #数据准备
( [3 s: i2 d* L/ k$ H( j. U from sklearn import datasets 2 |% l q8 s: V, Z
7 L5 D" @" w y2 \( N+ Q
iris = datasets.load_iris() 4 ?$ k1 Y5 T5 e5 U* ^
x, y = iris.data, iris.target
! ]% Z8 ?9 d) B+ O- C+ p pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))), + _1 e5 o7 u2 j) v
columns=[ 7 |- j2 o+ @9 v9 v7 C6 h' |
'sepal length(cm)', 'sepal width(cm)',
0 w4 O, i- M5 V' d- ~. b) M% B 'petal length(cm)', 'petal width(cm)', 'class' 7 J) v( d% `. h" ~5 u+ Z, d
])
8 E' _. S+ j. W$ K& v$ k with plt.xkcd():
% K5 h" V" d) e& w. f
0 d2 \ E, E& I2 s1 [5 }& E plt.figure(dpi=150) #设置图的分辨率
b0 y+ q6 U$ C7 O #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图 9 i, X; r( q/ b5 @. F; e- K
iris_type = pd_iris['class'].unique() #根据class列将点分为三类
2 Y& v2 H0 u W% Z; E iris_name = iris.target_names #获取每一类的名称
+ w' ~: R; Z" ^, ]( t colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
+ e1 A8 W J" M G markers = ['$\clubsuit$', '.', '+'] #三种不同图形 $ S# }7 `" J, f9 l3 {+ ]
' `3 Z) I* I- e; u+ p: V" @ for i in range(len(iris_type)):
7 _, ?$ f; u' H4 |: Y plt.scatter(
9 E ~3 ?( F/ C pd_iris.loc[pd_iris['class'] == iris_type,
9 T1 ~5 V' H( b2 r/ ^2 i 'sepal length(cm)'], #传入数据x . ?3 c1 k% ^' P, I( F
pd_iris.loc[pd_iris['class'] == iris_type,
/ L2 L/ [) F; J/ h. { 'sepal width(cm)'], #传入数据y 3 @% \; i9 \ \+ `# ?7 ~
s=50, #散点图形(marker)的大小 5 m& A* A# ?% G" p; K
c=colors, #marker颜色
, W7 I- F& F8 ?& c6 C; n marker=markers, #marker形状
! o/ K# j) Z; ` #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
0 a9 K0 V: _/ d. m alpha=0.8, #marker透明度,范围为0-1
) o b- X Z; G' \# } facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
2 _' O& O- [% h$ _ edgecolors='none', #marker的边缘线色
( }# Q$ t2 Y4 O( B/ ?- R linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
* j& o& I3 R5 w, s label=iris_name) #后面图例的名称取自label
, i7 P* f/ c- P$ n: g) O3 i$ B& { 6 B/ h) X! h4 V: S' s# t3 Z
plt.legend(loc='upper right') . P4 @, {6 Y1 `6 U! [6 j/ Z
|8 t) s* f1 ~% Y# d& u, n & x! B) N% e5 f9 Y$ F
———————————————— # r+ i4 I1 g$ _0 L0 X" e& v9 W2 J
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
3 ]% t! o+ E; G' _ B9 Q 原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753 : z8 P$ Z" `' n5 P4 ^. ~ K
^7 g# T9 \2 S$ b ) a; S0 a L% V* E. g
zan