- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563399 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174243
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
& K) K V1 t6 T6 B2 k8 Y3 P
一行Python代码有多强,可让图形秒变「手绘风」2 }& k/ h; c* @) a( ^6 c) u
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具& K6 _4 K) ]! g" ]' l; Y/ t& y
( ` p+ {4 q+ Y; I$ Q
, g( [* G* ]' f! G5 _, {但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
8 p1 f+ O$ V' y% F; @
3 p+ Z& f. ~1 r7 G, S6 S/ U' ]/ U6 M. @6 v, q4 I) [# O
matplotlib.pyplot.xkcd()简介
) K: d, ?5 i4 ]这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
! g. T$ A9 E' t: s0 P( Z- `- I( y. ]* `. O- Z
F$ F3 U" N+ d9 m( g1 Z, rmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度9 H, L; {, w9 V; m. l7 B
length=100, #褶皱长度+ I) x3 W1 v& i2 a$ j
randomness=2#褶皱的随机性4 r- M' z9 w d) o# j
)! `/ g# A1 V% }
matplotlib.pyplot.xkcd()使用
5 X' a/ j7 Z; m n4 D1 j" Y: U如下,加with行代码即可,括号中参数按个人喜好决定是否设置~& V, l' F6 c$ @
3 I. r* _' m# M) q. \/ G
& v5 H- v+ |8 Y0 s: Awith plt.xkcd(scale=1, length=100, randomness=2):8 O4 h& z# U& ~7 ]
#with是临时使用一下,不影响其它图使用正常样式
4 J) m4 V9 Q' l, G- `/ d0 m 绘图代码! z; c( n4 y. Z3 Q3 r+ w, Y
。。。。。。
F* G/ S9 l; C% b plt.show()
2 Y% c9 @9 C. _1 \: O2 Qmatplotlib.pyplot.xkcd()使用实例
/ U; V2 h$ n! N+ O( }, X; @: k) C9 D下面代码为pythonic生物人公众号之前的文章代码
0 R" O6 B8 x! F! Y& s7 E! |
$ b( Z: l" [* v3 j4 B- M& k& M3 v J% B; P& r; Z: L
以下参考:Python可视化25|seaborn绘制矩阵图7 ?/ v8 C7 w! o9 L c
2 ~- t3 Z' b1 W: L- f7 S/ W
1 D, m$ K7 r: H/ S& S+ l- }#支持seaborn
$ y) p; G/ S4 q# _! c, P6 g# bimport seaborn as sns
6 s2 T2 Y D4 c/ I7 ]# S3 tiris_sns = sns.load_dataset("iris")
- q9 @/ k( l6 R5 Qwith plt.xkcd():
8 |1 ~8 r. }3 t% L7 @! [* t8 q g = sns.pairplot(
3 w0 a7 I2 ~5 j- j iris_sns,
7 ]9 @/ z) K, g9 E" r. U, U hue='species', #按照三种花分类4 C h* x; V8 m3 g& ?% E! A
palette=['#dc2624', '#2b4750', '#45a0a2'])
9 p3 ]# b* W! H sns.set(style='whitegrid')
# @" v6 U0 ]: @) }* F, x9 |* F g.fig.set_size_inches(12, 12)/ M" J0 W/ A3 L4 {, W" p* @$ R* Y
sns.set(style='whitegrid', font_scale=1.5)
# y5 c5 Z, ~3 R' `1 B) c' r * A# j2 I( `. H$ a* w5 x
2 s+ X! @+ y1 }6 c. h, O5 R& d: d9 w0 X4 T8 D
以下参考:Python可视化29|matplotlib-饼图(pie)
5 n' }' s+ q3 p7 B* Z1 s9 K( c5 t, _* Q
- U+ d8 l. E! ?( B3 _
import matplotlib.pyplot as plt
8 D- e2 _" F" D1 I4 v; h+ [; pwith plt.xkcd(
+ H: V2 Q; e% g/ R3 I! D, P scale=4, #相对于不使用xkcd的风格图,褶皱的幅度# y4 F" F1 ?& Z& K5 F# P- {; _
length=120, #褶皱长度
, E! `' [+ P: {$ P. C9 Y randomness=2): #褶皱的随机性
3 L B% y. W K/ p8 n$ H4 |3 c: H plt.figure(dpi=150)
' X% D% M' C$ X patches, texts, autotexts = plt.pie(0 q# F) j, k# K
x=[1, 2, 3], #返回三个对象
! d) h% E" k+ L" n labels=['A', 'B', 'C'],
% V8 x: h0 D. Z' N) S colors=['#dc2624', '#2b4750', '#45a0a2'],8 e8 d$ y" ?% }( C0 I
autopct='%.2f%%',
3 H' O( v3 m. a& {9 ~' a explode=(0.1, 0, 0))' D+ W, D3 N9 w k
texts[1].set_size('20') #修改B的大小& z* ?0 w: U! I6 {$ l" X
. h a7 m& `3 c" h8 R$ v" L" H #matplotlib.patches.Wedge! l9 @+ L' t4 C) U& G
patches[0].set_alpha(0.3) #A组分设置透明度
3 k, | r( F8 R, h4 G3 S5 G patches[2].set_hatch('|') #C组分添加网格线4 t% C- H4 a( a4 m3 v4 m1 p2 c
patches[1].set_hatch('x')
! h" O2 `9 @1 {5 \ % G$ `1 O" Z) H' @
plt.legend(
$ g7 r2 h; ]+ w patches,* A) v3 [/ [( L: [9 Q# F8 S- y
['A', 'B', 'C'], #添加图例
' F4 ]% Q3 C; E- S title="Pie Learning",' B8 x7 b" G) @ K
loc="center left",
4 c& G9 n4 o2 X& ]% `$ Z fontsize=15,
6 B; _0 {8 h' d0 [ bbox_to_anchor=(1, 0, 0.5, 1))
* F$ p' o( E; y" | ]9 E! h 9 m7 Y9 l- V8 |5 _. d
plt.title('Lovely pie', size=20)* K2 ~% m. W- H/ S7 a
plt.show(). K" k0 d9 ^3 ~4 H6 _* n! Y( L9 m
# T/ S- B" s$ x: V- a
: V8 l2 b7 T4 {: i& l
7 ^( M7 g6 G/ v5 r
' M5 q% X# i5 a; Dwith plt.xkcd():
* C! o- ~$ r" ] from string import ascii_letters
- r6 V" y$ o, s7 O plt.figure(dpi=150)9 D0 ?- c0 W! l1 c2 }: X1 G6 G
patches, texts, autotexts = plt.pie($ m! A H0 y8 K7 r' ~3 F- b$ J# t
x=range(1, 12),
% R- }/ U0 w; A labels=list(ascii_letters[26:])[0:11],1 \0 t, m1 b0 e2 T V) G$ l
colors=[
1 ?1 z+ F1 I }) f( s' s: N '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
7 ~6 @1 `$ B) r% |' H+ i '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'3 ~0 w5 |; B( ? j
],6 Q' o4 o2 V& D) c7 s& Q, |
autopct='%.2f%%',' S. X& V6 X- P
)
) L1 S3 v# W% \6 B plt.legend(
1 X& W4 B8 I% c2 Z+ X! H patches,
$ P" p$ U1 j" \9 I5 G" H' u list(ascii_letters[26:])[0:11], #添加图例
& T, b: O0 Q7 F7 r+ M; F title="Pie Learning",0 c; e3 L$ i" u9 ~1 H
loc="center left",
# z3 `( ?0 e: O+ T2 L bbox_to_anchor=(1, 0, 0.5, 1),. L% H: i: O& Q6 A2 R, y- K
ncol=2, #控制图例中按照两列显示,默认为一列显示,
6 S) Y# @/ ]1 p4 Y0 d )2 r* h; S, p9 n) H0 M. R) Z
$ V7 j* |* h* p! B s
- [; T& r7 e- F# P' G1 l# v- R M3 k+ |* h a/ T! O
9 R, u: y! X- f) |, O3 himport matplotlib.pyplot as plt
& j6 g1 d* o9 E$ iimport numpy as np
, L8 M" _' h: C3 Z7 o# v5 o- Jwith plt.xkcd():
; F5 M6 U) m4 w% k plt.figure(dpi=150)6 b9 T) U0 a% j, o) _7 W& r
labels = ['Jack', 'Rose', 'Jimmy']% `2 Z+ W) [3 v4 o
year_2019 = np.arange(1, 4), n+ ^ t/ K5 n) X
year_2020 = np.arange(1, 4) + 1
# @! m. O Q5 ^& ]! e8 w6 B bar_width = 0.4
" R9 B3 u2 V; U- N* ?
6 k6 ]0 @# O+ r+ A plt.bar($ u" Q( t/ D. n+ Y6 ^ N2 R
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽" z v& p, m* [ x. q0 A7 A
year_2019,6 a1 _3 S1 }0 z$ H
color='#dc2624',
v% K+ a9 q1 Y; Y6 O. u- [8 c width=bar_width,
! S: `$ v+ o! e0 l label='year_2019' #图例; u9 n' e+ }+ |
)
`3 [- C$ p5 b0 ?+ I S) t plt.bar(
% w! Q4 E/ i$ t4 F5 h9 X: S np.arange(len(labels)) + bar_width / 2,* V1 v* \" }7 p; r
year_2020,& h+ j. h$ e \8 G5 A" o4 N6 }
color='#45a0a2',
0 C; U( I- M6 P3 X G width=bar_width,( H& n9 }; k& f. a1 W% z
label='year_2020' #图例
3 x% D! G' j3 K, h% r6 w I/ Q )
# i& I$ s4 A8 `! H$ n plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称' e: M. S6 S/ K6 o0 M! ~
plt.legend(loc=2) #图例在左边" v/ Y2 N3 k" P, e1 @) s1 \) W
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 : a5 H6 u: a1 _; p5 q4 D$ }
8 w3 ~9 g7 G" W8 D
6 j+ @1 c/ T7 k1 E1 m; v/ _, P1 e
4 H; u* O7 R. }9 p
& J7 e0 F# @' ^9 n# r, ~- T5 ?
5 v" x4 R5 X1 D0 }8 [
1 y2 e7 k' W$ Z! x# `以下参考: Python可视化|matplotlib10-绘制散点图scatter6 |3 {) o4 j3 e) Z7 n% M
2 H# G: `. M1 P: i0 g3 e# S, q; \; ~" B, K
import matplotlib.pyplot as plt
9 b9 C/ R( C6 C: ^3 ~. qimport numpy as np
: `, H; [+ d$ [8 |8 wimport pandas as pd( T; C. V! F; S' E1 w, B& z1 R
from pandas import Series, DataFrame
8 G; e1 }5 i- {#数据准备! R; P* K, d# S1 F4 R* ?7 V
from sklearn import datasets! N; @" j% \; _7 s" q
9 [0 z' b7 Z# M* Z' E% |
iris = datasets.load_iris()
+ \- s6 @/ P4 k5 f8 M5 O) Yx, y = iris.data, iris.target) f/ d* L- [; V/ h" c6 j6 D
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),, M! y2 e9 G7 Z S$ Y# U3 x
columns=[2 n! g2 X9 R6 a, l0 \
'sepal length(cm)', 'sepal width(cm)',2 {. V' K( T" X* J3 n
'petal length(cm)', 'petal width(cm)', 'class'
" F9 C( Y. Z7 x! L% m; d+ y. |/ Q4 _7 o& c ])( |. j. D/ q* T7 J/ `
with plt.xkcd():
; Q6 ^. @5 r7 r% F" B# C
" L& _7 q$ Q7 h3 V$ H plt.figure(dpi=150) #设置图的分辨率
7 {9 Q; ?7 V) o* c, r* G: y #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
# l v9 q3 h" O. Q, D1 S d5 D( D3 Y+ m iris_type = pd_iris['class'].unique() #根据class列将点分为三类: p. r% s- F- Z
iris_name = iris.target_names #获取每一类的名称# c m: P% [" `* r: H) S( U% Y) _
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色' l" y& @% v8 n& W( F: J6 D
markers = ['$\clubsuit$', '.', '+'] #三种不同图形; }' `# }3 b4 j* V
3 k7 C; k+ b/ ` for i in range(len(iris_type)):
. W% A L% `. X0 i7 n! i( U0 y plt.scatter(
3 C7 n. s2 n* S" P* z pd_iris.loc[pd_iris['class'] == iris_type,3 n9 }1 Z z# K
'sepal length(cm)'], #传入数据x1 z* l9 Y3 _9 f* V
pd_iris.loc[pd_iris['class'] == iris_type,
8 C% V- p$ P& r6 W& A 'sepal width(cm)'], #传入数据y: n; J) z$ F* s. ]; l* R4 M9 ?
s=50, #散点图形(marker)的大小' B/ X; L6 |% S! }+ w9 A
c=colors, #marker颜色
* h4 B) Q" S, X5 {) `7 P, ? marker=markers, #marker形状 F' }* {5 U, p
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
9 V8 j5 q1 m4 ?& G3 P- @- F/ i alpha=0.8, #marker透明度,范围为0-1
2 Q6 D6 R! d# I# l" J7 O facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
2 d+ K- \3 O0 r1 n$ I1 S edgecolors='none', #marker的边缘线色
+ U* c- | S; x linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
, d1 o7 K! V* G% f5 g4 Z5 n$ o label=iris_name) #后面图例的名称取自label( N! j% c2 J6 t+ R0 d+ X# ]9 B$ I
~; \& [' }& r plt.legend(loc='upper right')- e& t) w- a8 B3 n8 s
4 q: g6 y/ Q8 ^# I. h
Y% ?# z5 w$ {: P————————————————
* W8 H5 Y5 D$ W- f) W版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。& T$ i3 y5 n3 v8 a! G
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
; Y% j; B+ ]' I: u- ?7 N0 x" z6 m0 c, [9 A' e# T
8 L' Z- s( D9 ^/ l) J2 Y: x |
zan
|