- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563382 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174237
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
0 ]- |" H% d! ^# |* D7 r, ]
一行Python代码有多强,可让图形秒变「手绘风」
|/ w% m0 |2 u0 p; l( n之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具7 P* ]* r$ o0 _( \# R
3 c8 T. J; L2 }* e+ C3 C6 |. [
9 _: G s9 ^/ z+ T* `8 ?/ D+ V但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
5 Z. Z% {) V# w! B% Y
: k2 H5 @$ {8 M: k. d9 w! ~) |8 S! h% {
3 v( n" p/ o0 ?* Z- q& Kmatplotlib.pyplot.xkcd()简介+ N) ^) v$ y/ O- a) q+ D" Z
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小& w! v" l( P) X$ B% n. }1 y
9 u- p. {. P2 r! K. A- R% k
0 \; D: H# u. |
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
7 _+ ^+ V6 C* E1 N. x% A length=100, #褶皱长度
1 x$ ~2 v- D/ Y1 i1 z# e5 u randomness=2#褶皱的随机性# A+ j- Z4 E2 d6 G5 V/ `1 b, t5 I9 @
)
" c0 E o3 O1 N o2 S1 m- G* |/ zmatplotlib.pyplot.xkcd()使用
- m& n, Q4 i, k9 g9 H2 _. s# Y! x# X如下,加with行代码即可,括号中参数按个人喜好决定是否设置~' X0 {3 a' z6 y7 G& ]# U8 X! M
" q `. s6 Q) I2 N: Z `5 y7 f3 [) P
* t |: ^; L' |1 Z$ |with plt.xkcd(scale=1, length=100, randomness=2):
& l% M1 u: W8 ?5 K& ]#with是临时使用一下,不影响其它图使用正常样式, y* C* d3 J0 c3 I1 w% D& }
绘图代码+ v8 ? z6 A" L" Z5 |
。。。。。。) t% b0 [6 v+ O( j
plt.show()3 P+ u' z, F4 W5 m
matplotlib.pyplot.xkcd()使用实例 1 X' ^, v y/ M2 Z# T% q
下面代码为pythonic生物人公众号之前的文章代码8 g5 V0 @% N+ w* [7 s8 U
3 E f3 ?; S K, J4 d
: q$ f s3 {; X& T以下参考:Python可视化25|seaborn绘制矩阵图
# g# \7 l4 k3 L0 r% _
4 ?' u& i2 U; i' F( b# V5 g! m0 }0 C: N5 t; u) h
#支持seaborn/ L7 q& d- r7 j$ R
import seaborn as sns: r1 n! t9 n' V, g
iris_sns = sns.load_dataset("iris"). Z$ t. W7 q% C# k7 j4 c
with plt.xkcd():7 @, w. Z5 Y. t1 p0 G; X3 m
g = sns.pairplot(5 }5 R; T* E' v3 H0 p' z' V3 q
iris_sns,5 t" G( B) E# H
hue='species', #按照三种花分类8 M/ y0 n3 V) i2 l( t8 q
palette=['#dc2624', '#2b4750', '#45a0a2'])
x! h) C9 g9 c M sns.set(style='whitegrid')$ g" G( {. \$ D, `+ t2 f
g.fig.set_size_inches(12, 12)& ?- V: b) `) X* ]
sns.set(style='whitegrid', font_scale=1.5)0 @) s* E: g' p# V, |
/ C) A) J, w4 z( ?5 |2 R0 d. `
% P; z& U9 A/ `; [, x( p. U3 N8 g5 v+ @' [
以下参考:Python可视化29|matplotlib-饼图(pie)
) I2 a( V& @+ a% `' Z8 @! P
9 S) I0 J* c0 A" z4 M) U; e* Q. ^* V3 b" Z
import matplotlib.pyplot as plt
" Q9 e- d5 D. D4 Q2 r# P2 X2 x$ o5 Wwith plt.xkcd(
# ^/ K- E% U3 g3 u8 Q! w3 g scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
, R T* T& P9 W( r0 V7 M length=120, #褶皱长度; x- p4 x- f; @5 {8 P0 D
randomness=2): #褶皱的随机性, E+ o# G7 ]! A2 P, r3 ?, _* U
plt.figure(dpi=150)
# }, f1 ^6 l: X( w9 w N patches, texts, autotexts = plt.pie(
* |1 I- `7 m4 f$ v* N x=[1, 2, 3], #返回三个对象' [" R4 I# |/ [* d1 F4 v6 F
labels=['A', 'B', 'C'],+ C, }! H# p Y* Y$ S1 n! F
colors=['#dc2624', '#2b4750', '#45a0a2'],
+ ?8 u! K, c. [( T! [) u autopct='%.2f%%',8 ?, m5 J! I* f' x
explode=(0.1, 0, 0)), I* ~0 m, S8 t8 c1 c
texts[1].set_size('20') #修改B的大小. \: J1 q( I3 D- x8 Z4 ?+ e: b& J# t
" H- f3 i1 y( k. a/ o #matplotlib.patches.Wedge' ^4 q# f2 X" q+ m) k' `
patches[0].set_alpha(0.3) #A组分设置透明度0 ` x) C7 @$ i0 M. l% t, R$ N
patches[2].set_hatch('|') #C组分添加网格线1 ~0 n# V2 a5 z/ L$ \, h H& y( j
patches[1].set_hatch('x')& X: Z6 c: K- ]. @
& j) `6 c' z6 A. _( J) G5 Y; p plt.legend(+ v( j1 G4 ^4 y
patches,, D1 u) M9 N, n+ l
['A', 'B', 'C'], #添加图例
& U* ~$ V0 N* ~: `8 I$ W C3 e title="Pie Learning",7 o) G0 ^) K* X. p
loc="center left",$ P; Z& g/ B5 f# ]8 t- T
fontsize=15,! J9 T: m$ S% l- s w2 t
bbox_to_anchor=(1, 0, 0.5, 1))
" F; Y1 W: n, A6 f! `1 k+ l/ y
# E4 o. \ ~7 ?8 y$ y plt.title('Lovely pie', size=20)
G. @7 H' V% |9 c3 C& g plt.show()/ ~- @( h _6 F
0 J4 h" t" H+ C3 w6 p; R2 l7 s& ?% {7 H
( c* S3 U4 }; R9 x) }+ I" h$ N; ^" Z; k8 m/ [( j
with plt.xkcd():
# J* i! i) o/ k; H# x C$ k1 |5 O from string import ascii_letters m# C, P" h; T/ \0 C% ?
plt.figure(dpi=150)
. Z3 F( o+ U4 p+ K4 q$ v( r. z& O# j patches, texts, autotexts = plt.pie(
9 x$ d) l q- [5 w7 C+ I x=range(1, 12),
/ X* e$ E% x: B% g labels=list(ascii_letters[26:])[0:11],9 y5 b+ g( d( F. \
colors=[, F. J9 l/ |5 C+ g
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
* I h# l3 h0 }: Q/ P' R '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
6 ]+ ^9 b- F" T$ v" M- Q" X8 H ],6 k- a0 c5 m2 U( H* d, |7 ]
autopct='%.2f%%',$ H4 X6 C( i3 B, O" X: U( p
)2 B4 T5 F# L3 o6 [. E; `
plt.legend(
+ [% m( E I2 ^7 [7 |" v patches,6 `5 ~1 ~4 m$ h3 @5 [
list(ascii_letters[26:])[0:11], #添加图例
3 M8 a3 q3 s. ~ title="Pie Learning",
$ m+ v9 W r: G( _1 k loc="center left",$ K" w. j- n9 f
bbox_to_anchor=(1, 0, 0.5, 1),0 M+ U! c& u' g K. V# g/ ^$ Y1 C
ncol=2, #控制图例中按照两列显示,默认为一列显示,2 G. \% m6 w4 \/ B- N8 H1 [% b2 J% w! |
)
; ]: z, L Q2 O2 L7 m6 N- C) r/ }( W. i9 V1 |
7 Y. U9 |6 D7 ?
6 P" g( y1 G) d' P+ X! Y, q7 D
9 I6 O- h9 j! E5 i: Z3 N# N( _3 Ximport matplotlib.pyplot as plt
0 R1 l8 j, l6 ^# Uimport numpy as np" o" P. o F* o+ s& A
with plt.xkcd():
- {/ x9 x& O: C, L# F% u Z* k; ^ plt.figure(dpi=150)
# w+ x# I6 V" }; I+ G2 M labels = ['Jack', 'Rose', 'Jimmy']1 Z& k( ~. o) h
year_2019 = np.arange(1, 4)& |- n$ G% k( |% J2 x
year_2020 = np.arange(1, 4) + 1
! v* k3 s% f4 [6 v5 ]# P bar_width = 0.46 N1 S2 ?5 i: S$ h5 f' Z) ?
* I) {0 r4 e# d- w' M
plt.bar(
% F U5 p5 c& ^1 }1 _% t, E% P np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽: S* Z; a1 C% ]( k2 w! H8 v
year_2019,
9 W W6 f4 Z7 _' q color='#dc2624', I" Y( T5 b5 d3 V0 }& b
width=bar_width,
7 ~& Y! h% e. u4 l7 ] label='year_2019' #图例
, u% N" n0 m$ k# h )8 P b1 b' {9 f5 h8 X# L6 A
plt.bar(& J* ~# b$ x: S- a9 ]
np.arange(len(labels)) + bar_width / 2,+ l0 T3 q+ m' `6 Q7 S( C Q( ~. ^
year_2020,
# `6 I; c% m& K0 b color='#45a0a2',
/ s2 M |/ K: z0 s; |8 G5 U. Y width=bar_width,
1 e. A- I- ]5 Y6 d" E/ { label='year_2020' #图例
+ x& V$ a7 |- ~0 M) f5 S ) D" _; `0 T7 @- f( ?& \
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称
/ M( z: B' Z* v6 x: F% m4 j3 Y" k plt.legend(loc=2) #图例在左边
/ @. o+ N' B0 D S) ]以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
, V9 e8 V$ V* ^6 m1 e2 `0 M0 L6 E7 x$ E' l
6 j+ G$ W4 w+ i f7 b5 R
- r- D5 e9 M% R+ N+ e2 f% ^; ~
; ~% c! O; \" n, `& G2 D3 h5 A+ K6 A) W( i
1 M7 L% @; a5 Q, p7 u n( P1 v以下参考: Python可视化|matplotlib10-绘制散点图scatter8 H! ]. @' E6 ` o
6 u$ ^2 R0 q5 M3 b$ ^7 X ~1 Y" k+ z5 W
import matplotlib.pyplot as plt
5 G7 \# U! W* i4 simport numpy as np
9 r3 {1 x7 V2 M6 Uimport pandas as pd* c9 k$ w6 j& A: t( H1 v; J
from pandas import Series, DataFrame; Q# L( i0 O3 p$ q9 y2 t- m, X
#数据准备
2 D9 ^/ w1 A% g4 }$ r+ j0 F& ffrom sklearn import datasets! _5 [7 c' P' [. F: y# j
/ t/ q/ _. B1 R$ A# Z
iris = datasets.load_iris()
- g- \; ^7 D/ b4 z; p8 }x, y = iris.data, iris.target
- Y# v- A8 \2 K# G& b6 l! fpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),# M& T( ^& R$ O( x1 ^2 M
columns=[2 H% n; H/ F" f9 k: P
'sepal length(cm)', 'sepal width(cm)',* u* b& e, D: R
'petal length(cm)', 'petal width(cm)', 'class'5 K6 R% R$ D; H3 p* P9 Y8 o7 H
])1 k* l& Z' d0 o$ q/ \% D
with plt.xkcd():4 p2 w0 Z) b4 C% a6 C
# w2 a2 u. {1 S: T: h6 P) W: V plt.figure(dpi=150) #设置图的分辨率
% l( N7 t$ @' { #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图: f% n5 R: \4 c% o
iris_type = pd_iris['class'].unique() #根据class列将点分为三类
+ ?0 |0 d* T- [/ T$ H2 @$ H iris_name = iris.target_names #获取每一类的名称. ?" I* b# @# j6 B/ R' T/ q0 t
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
9 X" R; q- @ I3 e8 }2 w$ L markers = ['$\clubsuit$', '.', '+'] #三种不同图形 J/ ]/ z) a) Z( b" P Q
. n# c% ]) y, V% S" T r
for i in range(len(iris_type)):: Z, }; J1 d1 L% P
plt.scatter(
0 i4 e' r! E: c: u pd_iris.loc[pd_iris['class'] == iris_type,7 s6 E; Z7 B2 W
'sepal length(cm)'], #传入数据x ~, V7 ?" y6 }; ]/ R8 ~
pd_iris.loc[pd_iris['class'] == iris_type,2 [4 M* M$ \( _7 j" {
'sepal width(cm)'], #传入数据y
/ P* l; k$ q2 j s=50, #散点图形(marker)的大小9 }( K. w' _7 y) Q+ ]* e7 {4 l$ `
c=colors, #marker颜色, y# B/ V$ z0 Q& p
marker=markers, #marker形状
( Z- q* J) W2 l/ x$ b3 V7 i #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
) ~. L" y6 |# y4 D1 Y alpha=0.8, #marker透明度,范围为0-1
+ A+ P" X1 Q4 u4 u facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
, m. E- e: @9 O7 }: _ edgecolors='none', #marker的边缘线色
, X6 O7 o" a6 H2 ]( p linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
" @0 g6 @6 q! F( J label=iris_name) #后面图例的名称取自label
5 G( V" i- J$ x# d! U * S9 m6 q+ @6 F1 {6 p! G- M
plt.legend(loc='upper right')+ D/ R0 x+ ?3 c# x3 F; p
" X8 R' k; N: T6 Y0 ]' S
H7 I+ C8 } P H) ], C0 y
————————————————0 y* B8 t, F7 Y. g2 R2 j
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
& e! c |8 Y8 S# o9 y原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753) \! J# b: T0 f3 {. d
9 B' m+ C( o" h
/ F; V6 ]5 J& `" S$ R) w8 @. | |
zan
|