- 在线时间
- 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年大象老师国赛优 |
0 E6 `7 |7 Q9 x$ h' [
一行Python代码有多强,可让图形秒变「手绘风」 k& q& X9 T, |; c) j# J. ?/ t
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
4 _& N) Y* K1 K& L, y: [; X4 \: J! o v/ o
X3 d5 L; c/ b! f- w
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。+ I* X( p; P* m$ ~) r5 H
. Z1 F6 O: F2 [2 G/ h; Q( j
5 m# G. b6 a) J- s, L Y
matplotlib.pyplot.xkcd()简介
, b! n$ h( k- t ]3 f v* i' N- x这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小; h% C% \; n8 x1 f3 T& j+ U
7 y+ }8 v! @, s7 X* r9 Z5 m) o. V o! }8 R3 p3 E
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度# Y. D }! f# A* ~# f
length=100, #褶皱长度
; J! e* Z0 S4 w4 ~ \2 ?6 n& e, X6 k randomness=2#褶皱的随机性
9 m. O9 w% K! v0 `+ A- A )
6 |* N) w( H. G$ ` O7 k$ _matplotlib.pyplot.xkcd()使用
( D6 K' w0 k( h, m$ E如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
8 c, V# c {( \4 u# f/ R
1 m" \! I7 Y, B; z
1 ^2 d4 a! j- o) u8 gwith plt.xkcd(scale=1, length=100, randomness=2):' r. h B q6 q: J9 e. o/ Z* e) P5 [
#with是临时使用一下,不影响其它图使用正常样式
8 S3 [9 ^8 W, F# _8 Z 绘图代码( o! C/ \' w5 X0 O1 C0 N4 ]
。。。。。。
* M9 [ s( \* A# ^ plt.show()# I0 u; F9 k) c5 D9 _7 G
matplotlib.pyplot.xkcd()使用实例 . j2 Z' x, d/ Z
下面代码为pythonic生物人公众号之前的文章代码
4 V; C6 E, E% V3 B& H' T, V9 E3 ^# S- o2 v4 c6 _& R
8 H$ O: X6 t4 T# B7 ~- L1 B
以下参考:Python可视化25|seaborn绘制矩阵图5 g3 k4 O- s( a9 g, ~
' F6 z0 i+ \* o2 p: ^2 b
: }/ W3 Z& x' O
#支持seaborn
8 ]1 x9 j. v+ p/ l: oimport seaborn as sns" D+ C0 P( U0 l1 k; e8 D& ?
iris_sns = sns.load_dataset("iris")/ {0 |7 V0 q' Y6 J% w: R9 P7 K* A
with plt.xkcd():4 h* E! h9 D1 @) ? t: n
g = sns.pairplot(
; V7 u- _+ {% \ iris_sns,
: t0 v1 M# a2 M6 O' W hue='species', #按照三种花分类6 M a% f8 k8 ]" |$ h1 ?2 q& f
palette=['#dc2624', '#2b4750', '#45a0a2'])5 B$ o4 ^) k, j+ Z7 `
sns.set(style='whitegrid')
/ Y+ B1 r/ G1 e' h. u* n g.fig.set_size_inches(12, 12)
0 }* N1 y e% ]) r4 ]. H) c2 P sns.set(style='whitegrid', font_scale=1.5)
9 [/ k/ Z/ p3 M9 U 9 n: \) @" J! F. S
) T% Y, t/ [' N0 o, W
9 J6 U0 y( U( ?( q2 s2 g以下参考:Python可视化29|matplotlib-饼图(pie)
t* p% q& f) x* w) w; P$ U
& l: k! T' s0 L4 y% w
( O( K2 ?- H+ n" ^1 U# |import matplotlib.pyplot as plt4 T8 F" {1 V0 K% W/ E P
with plt.xkcd(1 A& x) a: J- B% O
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度9 A( l. I/ K/ e& `
length=120, #褶皱长度
6 |/ ? c8 v+ ~ randomness=2): #褶皱的随机性
, M/ ~2 L ]6 ~: e5 j plt.figure(dpi=150); s S2 R( e* v3 B; f. R
patches, texts, autotexts = plt.pie( I& `& C8 \# r/ J6 }
x=[1, 2, 3], #返回三个对象
( x, {! ]0 m! k/ t9 P5 ` labels=['A', 'B', 'C'],% }8 _' w9 ^8 s' y1 Q; i
colors=['#dc2624', '#2b4750', '#45a0a2'],( u2 w: [0 V+ |/ f6 y
autopct='%.2f%%',
1 m5 d1 n r% _: q7 U5 o" C4 H explode=(0.1, 0, 0))
* v' g8 v) k! ]: S3 [, ?9 k texts[1].set_size('20') #修改B的大小& {# X0 _$ X' S: C# e: E
# p7 u2 s6 ?: N T8 R& Z1 z #matplotlib.patches.Wedge8 ~6 l" F/ G" I, v! x" ?
patches[0].set_alpha(0.3) #A组分设置透明度& s! C6 T, a- W; ]3 |1 r
patches[2].set_hatch('|') #C组分添加网格线
$ @0 B; S7 s0 D' p/ ^$ M0 J ^ patches[1].set_hatch('x')
: ~) b- j7 k- T0 L. p* i
6 I. G9 P4 o+ p8 ^ plt.legend(
: V& F! v: k# S' }1 {2 n( q! k patches,/ @$ \ b K) Y# X/ l
['A', 'B', 'C'], #添加图例3 c5 u, Q4 M5 Q$ P( N9 ?6 I* v
title="Pie Learning",
, P. T! c# S2 n loc="center left",
' @$ H1 Q6 h6 q$ _! y: G" c fontsize=15,3 A5 J- }6 x/ F" I. N n
bbox_to_anchor=(1, 0, 0.5, 1))& L' }% Y, _* ]
6 M4 T# I" |* \2 t" w$ H
plt.title('Lovely pie', size=20)
0 s) z& x- U/ F# ?# ~* ` plt.show()& b! S+ M1 P4 `
6 v, d g1 u+ f- n7 M2 \' x$ ]) ~- U" A6 J; h# _& E' J
8 j; }0 w) G i6 {3 Q4 R
9 [* [0 \' Z6 I# j) Iwith plt.xkcd():
- Y: G0 ^9 ~3 v* k s from string import ascii_letters
" T5 F% x j5 y" S3 i" q& x; R plt.figure(dpi=150)
3 B0 ^3 `, g$ n( B9 R) Y% o patches, texts, autotexts = plt.pie(
* Y" P( E/ ?0 g D. f+ Q x=range(1, 12),- x( D! E1 s& R( r( U
labels=list(ascii_letters[26:])[0:11],4 n( l5 Z- |5 _
colors=[" b+ f, e. i6 F/ K& _
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
2 G; W( E$ s) E! d5 \ '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
0 ?7 J/ a1 G9 n, H. d$ I8 g4 N: X ],4 n6 V @. e8 k/ H
autopct='%.2f%%',
3 U* B( H; h& e! ~ )( P0 V# r: x3 T( R: J5 |* j! q z
plt.legend(
$ V' _& v' U& [, f patches,+ w1 s1 W6 O* o1 O! j4 N
list(ascii_letters[26:])[0:11], #添加图例: r7 l; ^* X- h M7 B# s" t$ Z: Q
title="Pie Learning",
) x9 S5 E' R$ j4 i loc="center left",' E! [" C# k h4 b7 u
bbox_to_anchor=(1, 0, 0.5, 1),( P' K. J7 _2 L8 F( [
ncol=2, #控制图例中按照两列显示,默认为一列显示,
( I* h1 w+ x/ b: c) C )' @# M Y! W8 I& r$ _; V
5 A" s# J! e' d7 h
: F* k' Y/ d* K, n5 [$ T
2 m7 n2 s! o# V% d1 F5 f5 ]: l
/ [& f% `: @3 b5 E7 f2 z0 kimport matplotlib.pyplot as plt0 p3 L- J8 f1 A6 |9 v
import numpy as np
% A" a f4 c! c8 Wwith plt.xkcd():
5 r4 m ^% {" r3 z& P plt.figure(dpi=150)
* v0 j2 n+ ~- \/ H labels = ['Jack', 'Rose', 'Jimmy']9 L4 s3 z( y/ J
year_2019 = np.arange(1, 4)
0 r5 p0 B" K0 Z# \& `, P+ C8 H year_2020 = np.arange(1, 4) + 1, ]; E6 ~, N' |5 r) p: B
bar_width = 0.4
& c j9 k* W$ G; R1 F) n ) U+ c' H9 N3 _+ F% }! A. o6 W
plt.bar(6 k U5 R+ N- {7 }' E! l
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
! p$ l$ C" `# e year_2019,( B: g; Y" p8 O0 j2 @# M
color='#dc2624',
0 S4 B4 y, F9 R* H width=bar_width,
E7 }% R$ Z: ], ^$ V, M3 l label='year_2019' #图例
' Z2 h* o r/ U, Q )
l; c. q* Q7 t' o+ B plt.bar(
9 l( p9 g) k- ]1 o/ q/ @ np.arange(len(labels)) + bar_width / 2,
, J* c+ h0 m; }2 g2 ?# g year_2020,
9 _* |' F1 W& D color='#45a0a2',
- x4 j/ L! `4 A+ r width=bar_width,8 y, V/ y- u }! J
label='year_2020' #图例
. h9 L6 r# p3 X% f3 A )1 m) I! E- ^( t' c6 M( G
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称
' A8 [$ ]: b9 E. w1 U+ E plt.legend(loc=2) #图例在左边
: P* U( \) O* d1 l: [2 z) C7 A以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 - Q4 c/ r( {/ I9 A; q
. n8 X3 k7 k) F: J _2 p2 u/ v4 a7 ]
; |1 I9 Z; u, b' ^6 [0 K# z% w: E; V u2 j8 q
5 A, ^# H1 b( L! g0 N
+ F) e/ A+ n0 C, {1 f. F, v1 M- H* O0 q# j
以下参考: Python可视化|matplotlib10-绘制散点图scatter# D% U0 n$ @" k, }. m; R
: \# o2 m1 Y$ X' ?/ E3 g$ i5 p: t9 @9 u' i
import matplotlib.pyplot as plt
& |/ K; F3 I8 X7 J. S: r# Eimport numpy as np
" {, O4 C* U( D( q0 H0 ] iimport pandas as pd
5 k8 y- ?" ]2 p( D6 c- ^* ^from pandas import Series, DataFrame& I$ w: P1 k: ` p: X; S1 p
#数据准备
% I* U6 G. t" n( Xfrom sklearn import datasets) X& h; @7 n% k; K( f
0 o) b8 m; P2 F/ E7 |- W6 k d
iris = datasets.load_iris()/ b! A! }, A5 B3 }( ~4 Y: |" ~
x, y = iris.data, iris.target1 D0 U/ R9 f4 J) Z4 q& R
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),+ e4 h, h, K2 Y8 G9 N: `
columns=[% b% [. i# n; O. \& d* T
'sepal length(cm)', 'sepal width(cm)',2 K% r g W6 l% y6 e5 S
'petal length(cm)', 'petal width(cm)', 'class'
$ E5 S: b+ ~/ k0 | ])
2 Y% J$ f5 l: }, |! U2 l( F- J/ uwith plt.xkcd():' r9 p; k" s, \5 e4 ]" e
% q6 E. O7 U# {% _" X plt.figure(dpi=150) #设置图的分辨率
. b9 w5 z! Y3 p6 U #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
: \) F' o. w1 L5 n" l iris_type = pd_iris['class'].unique() #根据class列将点分为三类
* T" c, W6 u! O% A, V iris_name = iris.target_names #获取每一类的名称
! |% q& |: D$ F colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
/ n" k: }1 H. }) ^* f1 @. M markers = ['$\clubsuit$', '.', '+'] #三种不同图形
9 K' H2 s7 k1 G4 {$ j! I# _! F
- r# H& |) `* }$ X& x# Q E for i in range(len(iris_type)):. A$ i2 W4 j( ?
plt.scatter(
; \3 M, d! O4 V: E3 C2 C pd_iris.loc[pd_iris['class'] == iris_type, y- B! f! p! }. {
'sepal length(cm)'], #传入数据x
* V6 y5 \5 I; e; P E2 q5 Q8 J& C pd_iris.loc[pd_iris['class'] == iris_type,
" I! K( A- }; D 'sepal width(cm)'], #传入数据y
7 C6 u7 o8 N. R$ i% @ s=50, #散点图形(marker)的大小2 c8 i- x' I: r' M1 w5 t h, ?
c=colors, #marker颜色
- N- F. u* j1 y: z/ } marker=markers, #marker形状
& Y: U4 o' Z; H #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
7 L1 [; T+ g( d4 k! o/ Z( U alpha=0.8, #marker透明度,范围为0-1
* t; T$ C: x2 u facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
/ F# l6 N3 K: t: e" b edgecolors='none', #marker的边缘线色% P4 l: m2 p. P! Y% J2 P
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
5 ^; g$ _7 G$ t5 k& q label=iris_name) #后面图例的名称取自label
6 S% _( N7 v- s5 h. Q
D* G4 z2 m- h3 W3 ~ plt.legend(loc='upper right')5 J8 e/ j: B9 m: X. g! [4 k
! a2 t: k! A3 O0 F4 A( Y% L! J8 \; ?2 a
————————————————
! {) X7 |3 c; ^( V% a5 D版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。* t9 U( A( P5 W
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
+ t6 f% E/ Q; T0 ?/ z" s5 I. B! N. K1 d G0 n3 [; [8 L; U+ Q3 I& k7 }
1 I* D7 {$ M/ e; w9 A
|
zan
|