- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566435 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175153
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
1 i3 T( t! r- p4 |一行Python代码有多强,可让图形秒变「手绘风」
% Y$ A1 a7 x. a9 y5 P之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
4 |+ C" S4 M0 y! B0 J y# O$ k
" P1 v! \1 A& }4 e+ l& G& P/ q* z! L2 ^, C* _1 }
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。* p( c4 y' {; c
6 e- }) q: ~, f e3 y Z9 E% V8 T
$ \! J6 @6 c. ^ Umatplotlib.pyplot.xkcd()简介
- ~( {& f1 t; q1 u' m* ?- B. _- {这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
4 x* [4 z/ e4 p/ G* Z
& j; C" p* Y' f- i* Y; `
$ F% @& \2 ^: B! u& \$ hmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度4 ?# Z% Q* D: h
length=100, #褶皱长度0 }, a Y( `" R
randomness=2#褶皱的随机性
8 s& n b5 H- E7 U2 i$ | )$ ]$ V/ u+ }$ E- B c; K* n
matplotlib.pyplot.xkcd()使用+ |, N4 F, M; o! }0 X
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
" k" L* E$ _7 ]+ T/ k, W" ]0 I" O* ~0 d2 T* x2 @2 S7 p
7 P9 n: L. v) c4 bwith plt.xkcd(scale=1, length=100, randomness=2):
# v; \% Z1 ?* M7 O! G" |- V#with是临时使用一下,不影响其它图使用正常样式3 t$ v2 S2 y( r- w, g
绘图代码( Y7 |. t8 Y$ \! L G! s$ a) r
。。。。。。( j6 h% _2 G2 r
plt.show() m' M* s& m1 V/ Y
matplotlib.pyplot.xkcd()使用实例
" |5 M7 Q2 u! c. z下面代码为pythonic生物人公众号之前的文章代码, Z1 I+ ], M+ V/ G- j
7 P5 z$ O* ^7 b& @" l; j' b- F ]5 N) H. _, n
以下参考:Python可视化25|seaborn绘制矩阵图
" J8 X$ a! l% X! m* x
& }9 [4 g7 P7 r- h% m
' Y3 i: e- s! S4 o5 p& b D#支持seaborn
# c+ |7 {$ K9 U; {6 P) wimport seaborn as sns: H w4 [) p z/ _/ F a
iris_sns = sns.load_dataset("iris")# L/ h8 z& `0 M
with plt.xkcd(): c, [: g _ y* Y2 \" n
g = sns.pairplot(- @4 V" L7 K7 I8 c
iris_sns,
5 L5 C" w& I c* w/ c hue='species', #按照三种花分类' H( Q7 l/ y( }
palette=['#dc2624', '#2b4750', '#45a0a2'])9 S. N6 e3 \- o, \4 }
sns.set(style='whitegrid'): J& W$ F* K% r/ r
g.fig.set_size_inches(12, 12)
5 @& ~1 [4 H9 A- C sns.set(style='whitegrid', font_scale=1.5). x& n Q' ^: x, }% G+ L
2 w6 B/ i4 B& r7 h; F
7 x- B! o$ [. q" X* v: Q* Y/ c$ d% o( ?
以下参考:Python可视化29|matplotlib-饼图(pie) + Y$ H" ` ?- s d* u
I$ v2 j/ E6 V- u* ~+ }% l
: w$ {7 U3 E3 N
import matplotlib.pyplot as plt
) P% Z4 r) k E. o4 Bwith plt.xkcd(3 v. J2 i! D4 ~
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度! S) {- x! M+ \3 G! p; T
length=120, #褶皱长度
* L& K9 |: O5 U1 I$ u8 V% K randomness=2): #褶皱的随机性- J3 Y N7 K6 n$ }2 q& o
plt.figure(dpi=150)
4 r; C# x3 I7 ~1 E f patches, texts, autotexts = plt.pie(( p' k! O! L' D: j4 q
x=[1, 2, 3], #返回三个对象
: D) W4 Y4 B! R R labels=['A', 'B', 'C'],) E% H* d4 g1 S. Z b9 p6 ]
colors=['#dc2624', '#2b4750', '#45a0a2'],* n1 J) L: c, b, l
autopct='%.2f%%',
3 J; {) Q7 U1 {0 a explode=(0.1, 0, 0))
$ U# l* }& c" z" j0 v6 y texts[1].set_size('20') #修改B的大小. R9 J: _# ~# v5 R6 o" C
7 ~# P# L! u5 V #matplotlib.patches.Wedge
( S0 H8 ]: V7 b o' z/ I patches[0].set_alpha(0.3) #A组分设置透明度! }7 M; k1 Q. c0 d$ _. X/ l
patches[2].set_hatch('|') #C组分添加网格线
* W$ l/ o! Y, C* r; Z5 ~ patches[1].set_hatch('x')5 n3 O) @6 b& r2 n. ~3 t4 c
( e, ~; H: b* r plt.legend(& L1 a% J( B% ~( ~/ ?
patches,. {' d% \6 F, b( t4 U
['A', 'B', 'C'], #添加图例1 g _4 a/ Z9 Z$ I% f! O: G
title="Pie Learning",
0 d& J, K! N6 O: `. W loc="center left",/ N7 i/ t* M* f: W* g( V) d( _
fontsize=15,
1 w1 _6 b- i$ p. V, u bbox_to_anchor=(1, 0, 0.5, 1))
. ~& g; U: `4 q# V3 t $ o! O: |4 p1 {& ^2 m
plt.title('Lovely pie', size=20)( o: A" k" E, ]5 X5 L- Z
plt.show()$ S) J! o* Z" X
/ W, x# n5 U6 F/ w3 j6 m. Q4 y& ?
) z5 Y, u- K( P8 [: _7 U
+ \4 D- W0 o* k0 k1 m$ e' J3 H
7 I' J( G) i- _5 M# T7 r i Wwith plt.xkcd():3 y' u" B& ]# n; e- h9 \
from string import ascii_letters
/ g$ _$ U2 l Z( t4 m+ D( n plt.figure(dpi=150)# F5 B+ J9 S& S# J/ i, M# D
patches, texts, autotexts = plt.pie(
5 ^8 I5 a w# t: I$ A3 B x=range(1, 12),, O6 Q, N2 z0 a' y2 b
labels=list(ascii_letters[26:])[0:11],
1 `% v- t3 z5 X colors=[
/ {' S6 w" j( B' s: t1 u8 | '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',: m- x/ X- _- e& D
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
* D. F; D( w0 W* _ ],
& F# `/ E9 L# K* Z& y( @3 F autopct='%.2f%%',; r- ]4 \. ^, O4 B+ V, x
)3 x' t$ Y" r& E" E3 U4 ^1 O! p
plt.legend(
2 ~' r. p% |/ @* \4 L( ?6 U7 U# s patches,
n3 Z4 N7 W2 [' m list(ascii_letters[26:])[0:11], #添加图例7 Z. H( c& N8 P: m/ E4 w
title="Pie Learning",
; A, d4 c9 v; T5 l1 c+ t2 _( K+ @ loc="center left",: y k9 L. B) R8 T* b* L
bbox_to_anchor=(1, 0, 0.5, 1),
, N7 {2 C9 w; W' C ncol=2, #控制图例中按照两列显示,默认为一列显示,
3 J2 T9 V& z8 d' p )/ L* [! c: V. h* `0 S4 {& P% b% {
, I" R$ P( x! A/ X. X! D9 p, b2 [- f W' W
; D9 ~9 s3 e% ~" }% h: T+ N
4 |5 u. n- { m% R# M2 c+ Simport matplotlib.pyplot as plt/ i i' P# E9 `6 }& P" Y& a* c
import numpy as np
6 l1 K5 Q7 f/ gwith plt.xkcd():
, D3 M5 O5 e+ \5 i plt.figure(dpi=150)
8 d* O$ E- R* K8 M7 Q labels = ['Jack', 'Rose', 'Jimmy']: E% Z+ a8 E, P# u" ~ U$ L. }, M
year_2019 = np.arange(1, 4)- _9 {+ E: r3 t* @, `
year_2020 = np.arange(1, 4) + 1
" H6 y h! s" S' x/ ~/ `$ u bar_width = 0.4
; H/ u! j1 { {% k5 x/ U& p 9 Y, o1 j* h! Z; w- Q; f
plt.bar(6 ~ ?' u# B9 g! x7 f9 ]* f& c
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
0 _& {. W) _( `1 E4 @: P year_2019,
( |3 f S% j+ C6 i( V5 s* J color='#dc2624',
+ l9 y6 K, g4 _5 z width=bar_width,8 @( q8 e) _6 s0 W1 Y
label='year_2019' #图例8 l" F- V/ I" P7 v
)7 S3 j4 R, c8 N
plt.bar(# j3 i8 }& i8 j7 h5 w6 R/ \
np.arange(len(labels)) + bar_width / 2," y" i+ X$ o* S1 D
year_2020,2 d' N3 S6 P6 |1 \
color='#45a0a2',
1 q7 i) i: P3 O! W8 G3 S width=bar_width,: l K ]2 Z9 I- s8 Y
label='year_2020' #图例
" B; v5 w8 x) |4 F9 _ ), [; m7 ]6 m; O7 |& x. u' _; d
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称
2 B: ^* o0 A2 A! P. R" ^ plt.legend(loc=2) #图例在左边+ F) l S) [0 s1 t4 s/ z
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 ) c* x- l1 b8 V: q
) i1 T( B/ `# A
6 E3 H, Q; ]7 L# {' g' d9 V" M' a$ |$ A- y% C- I6 n( d
; k* A% F& X3 }3 l+ n" s Q+ O( M" `3 S9 |
[% r9 I# r8 w, K& O( a以下参考: Python可视化|matplotlib10-绘制散点图scatter& _4 f9 {8 I0 l y+ o/ F+ X0 [
1 v3 E& M7 A, d/ B: i" B& J/ U% _2 j0 D6 o+ ^, B. |
import matplotlib.pyplot as plt) U; c' b& F# ^# L4 }
import numpy as np( L6 q; x; X+ i8 }! L
import pandas as pd" E# z6 p2 j1 r
from pandas import Series, DataFrame
: Z/ H; l8 k9 E2 W& _7 K& y4 r' p#数据准备, l8 r& B' P# I5 A6 P
from sklearn import datasets) `/ h& Z' M5 _% M3 @2 t, @
1 H4 d( ~3 Y$ l9 k$ A* o2 ziris = datasets.load_iris()
* h8 W5 K1 d8 k; px, y = iris.data, iris.target
[1 `& y( u' F* E7 @2 Rpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),- `) ~) H$ h5 R1 t; W
columns=[! |% g- X# x9 C! A
'sepal length(cm)', 'sepal width(cm)',
7 v% s& f8 n+ ^ 'petal length(cm)', 'petal width(cm)', 'class'
! x! e2 J, Y3 B( u5 m4 G- m9 k ])
& N# a6 P \# h) Jwith plt.xkcd():$ N% M3 d1 d4 ~4 H; u9 I
: W* V x1 F0 g# A+ q0 Y1 o7 w plt.figure(dpi=150) #设置图的分辨率! h; a) R; r3 r, \# X7 D
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图; x) N6 x( Z7 k$ W
iris_type = pd_iris['class'].unique() #根据class列将点分为三类
4 c6 O& E5 t- ~( r" D N. [ iris_name = iris.target_names #获取每一类的名称$ B8 J2 _' O+ s* e: w! ^& M7 L, x
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
+ o0 g! r& z2 T: N6 r0 g markers = ['$\clubsuit$', '.', '+'] #三种不同图形6 h1 _7 l# q. K
J$ v/ y) q4 j7 X: r8 {
for i in range(len(iris_type)):( k8 T$ R7 G& }+ I5 o
plt.scatter(7 @ i l; ~5 h: ]2 }# g4 O0 o
pd_iris.loc[pd_iris['class'] == iris_type,
. Y. ~ R9 v: _; V 'sepal length(cm)'], #传入数据x. A9 A" z: k8 t! D5 P7 N
pd_iris.loc[pd_iris['class'] == iris_type,
# U! x) p' y3 P, `( w' M 'sepal width(cm)'], #传入数据y q+ v- z! Y! N0 @, s) j) o5 q
s=50, #散点图形(marker)的大小
* i- x2 ]3 `( G$ J+ e c=colors, #marker颜色; T, q. Q {" k: K8 A( _
marker=markers, #marker形状! p& e$ i' U% N2 P8 B
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充% z1 B6 w0 m; C2 J
alpha=0.8, #marker透明度,范围为0-19 S( q' _$ A& S* n# l) w0 ?2 `
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c. T! z/ j) b- x" y* S
edgecolors='none', #marker的边缘线色" R w+ y& D# Q( X. ^9 P
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用4 T- l" Q. j# u, Y. l1 ^
label=iris_name) #后面图例的名称取自label. W1 y/ X- b% F2 p' r2 ]0 V
" P( B" I$ m- o5 y( P" T& ?" w plt.legend(loc='upper right')
; J5 n. k" Q% r/ D9 x% K2 c, W" H! N3 a% |6 W# c
+ I: f0 y( k+ ~" A" b+ E+ }% o
————————————————
% h7 v. ?9 x6 T" W, d版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
% H. J3 b! G* M+ f) A2 v G4 m! i原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
7 Q* r N' H- \" @. S2 Y; x7 j# m+ v3 L; } u3 X8 J/ K5 P/ {. C
- K% z3 l7 j9 _7 U& \" R& x5 Y
|
zan
|