- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563379 点
- 威望
- 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年大象老师国赛优 |
) F1 g* s7 m' u1 N
一行Python代码有多强,可让图形秒变「手绘风」& B4 ~: q7 c4 D9 V8 I# _
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具 a* H0 p8 j* R, E
( D4 |/ t& p h" H' M; a
1 H) T# U+ V# H8 N
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。/ J. i( A) t" v5 E% C* \
% ~! `) s2 k" @3 o; P
" M f- R" ?5 s' j. A4 amatplotlib.pyplot.xkcd()简介
% ]& F: O% s$ F5 J- Z; ?/ }这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小5 d: e1 A" A/ E! v; M$ N+ R
6 g' a1 j9 R/ U0 \- l/ G0 Y/ W) R5 `+ L L; H
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
) t# ^% T/ c8 ]3 s" I8 t length=100, #褶皱长度7 q, `/ ^8 \4 G! l
randomness=2#褶皱的随机性- a% a8 _, @9 T% _; h
)* E: c" M9 n, V# E* D
matplotlib.pyplot.xkcd()使用) R+ M7 |! H- ~9 Q& b& g
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
6 Q; K. d) Q* S% H0 a) @# E( Z( w7 g
( e' v9 [1 N/ v4 f: `with plt.xkcd(scale=1, length=100, randomness=2):! y, h/ H+ b# Q. p; W o
#with是临时使用一下,不影响其它图使用正常样式7 `5 C) b9 \7 \! {5 e1 e
绘图代码
% x' U& Y4 q5 X! ^( | 。。。。。。& K: p5 G4 R4 P6 G! w' E- e
plt.show()* S3 I: y( o# E# C: F+ Q, U$ q
matplotlib.pyplot.xkcd()使用实例 - d) w" b$ U) M3 l
下面代码为pythonic生物人公众号之前的文章代码. p. u R1 F) j' \5 v$ @
: r) H2 f% }; x
/ |$ B% {$ T. ~- F: Z' y8 j2 S& o以下参考:Python可视化25|seaborn绘制矩阵图
7 ^$ H% V( c' c' J$ ^1 J% s- A. |' y% _- G$ \
6 ~ r% X) m5 k6 k#支持seaborn+ O: d8 Y" S$ q* @7 Y
import seaborn as sns
. A3 T& L8 p$ j3 \+ F" d, qiris_sns = sns.load_dataset("iris")* M& D S' i& @! q1 R2 H
with plt.xkcd():: S1 C1 U9 f7 C2 g7 [- j- o
g = sns.pairplot(
9 [: E6 f5 r$ R( S iris_sns,
- ]) m2 J3 R, e, R hue='species', #按照三种花分类
2 [6 o" M" n' d) v/ r0 h) Q* b, P palette=['#dc2624', '#2b4750', '#45a0a2'])
: v$ @$ j# w3 p5 g; @" S8 B6 Z sns.set(style='whitegrid')
7 W* L0 p s$ Y6 ^$ S8 ^, M g.fig.set_size_inches(12, 12)
- d: m. U9 p! B8 R! h* h c3 ]; H sns.set(style='whitegrid', font_scale=1.5)) G8 I5 s4 v% |. U8 |5 ?
# N9 u) Q! M4 z
: ]# d1 d" n$ u1 p* c9 @- v; n# m, [# V7 ^
以下参考:Python可视化29|matplotlib-饼图(pie) ! J, _& n, a4 ]
: [+ ~; p+ H0 ^' U; B
4 l" K3 G6 Q8 ~" ~6 F* S* Nimport matplotlib.pyplot as plt8 X# r. \# y- y4 f% X3 z5 K
with plt.xkcd(4 U1 r3 z( u* o* r2 K& K
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
# o. V& P" n0 M length=120, #褶皱长度5 |5 ?, U3 a* r H
randomness=2): #褶皱的随机性
9 D8 _9 B; p7 x, ]: p. Z. b5 U5 M0 G( u plt.figure(dpi=150)
; [! c# X! ]6 `- u& `) K patches, texts, autotexts = plt.pie(
% t+ y0 a- D/ C7 y/ j x=[1, 2, 3], #返回三个对象
* h) C' R& H0 |- e$ ~9 p labels=['A', 'B', 'C'],' e# y0 w1 ?. M+ U
colors=['#dc2624', '#2b4750', '#45a0a2'],
]) B4 h! s/ U& O8 v. p autopct='%.2f%%',
/ |. c H+ m1 f8 T# M$ {+ w explode=(0.1, 0, 0))6 K: p1 W" e! G* e
texts[1].set_size('20') #修改B的大小( J5 e& ?: v/ y. ]3 a
9 u# g _1 E* a" Q4 k #matplotlib.patches.Wedge
3 t7 G( V+ b8 @ patches[0].set_alpha(0.3) #A组分设置透明度
( V: C- D/ x! q% l patches[2].set_hatch('|') #C组分添加网格线
2 x* Z1 B4 c5 D. r2 y patches[1].set_hatch('x')
3 h3 |2 ~, [% x: H. U
% S# }+ \( s, M, B plt.legend(& [$ e/ g' J M% i9 ~
patches,
4 _6 q" Q, B1 H1 ^ ['A', 'B', 'C'], #添加图例9 x9 ~& d# B9 {% _; P$ T& a% g
title="Pie Learning",0 V+ a* y7 N4 G& r
loc="center left",
4 [! T8 {+ D% s( V- e7 U fontsize=15,
* S0 G/ C2 g# w8 J bbox_to_anchor=(1, 0, 0.5, 1))/ R6 {4 M/ r* l8 ~% H/ Z) D! [
# V' q, O6 |2 ?$ C* S8 r/ \
plt.title('Lovely pie', size=20)1 w; f) U* h: N/ y1 P: B
plt.show()/ g, M2 W4 B9 L4 M6 ~% y& n9 C9 H
9 h7 ?% h$ Z/ h6 b
p7 z v' ~8 \* N, _
3 U5 h7 {6 G8 Y. m9 \0 q8 y
; T# E: H: N0 s1 H @' Dwith plt.xkcd():* u9 o) a$ ?9 x3 F
from string import ascii_letters
. V- m4 x1 X' Z+ o0 A1 m# u/ Z plt.figure(dpi=150)5 {* F- u7 @1 u. P$ k0 O
patches, texts, autotexts = plt.pie(1 r: d$ }* @( p2 n0 c9 ]: \7 H
x=range(1, 12),9 b, o# u# U! b+ N4 S
labels=list(ascii_letters[26:])[0:11],' U2 N9 m9 c9 C0 K
colors=[$ m5 x7 T/ ^! b1 \
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',! f" I0 Q/ H" v4 T, H4 R
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
& [* {$ y! Q8 Q8 R$ p# D. f ],! |, i: w: K: \) V5 d, K
autopct='%.2f%%',
6 r/ a/ m4 y4 x# W6 A# t# l, A/ o )
1 X2 b P. k0 Q! K1 t plt.legend(& m! ?- d1 C2 R2 s8 \
patches,
% n5 [9 X, ]0 f l list(ascii_letters[26:])[0:11], #添加图例
4 V7 B! m! m W6 z title="Pie Learning",
, i1 }* @5 `& c4 N( {9 @# C' ~( L loc="center left",
/ t: v- s: o( T/ x# }* Q bbox_to_anchor=(1, 0, 0.5, 1),$ |- q' ?) u0 ?. b& L& R9 A
ncol=2, #控制图例中按照两列显示,默认为一列显示,
1 i4 _. A& r4 k; q( q )# J& k! r8 b9 r W5 K
( I) s. u8 {6 r5 R
( a% Z; u! Z; G5 n! |8 p! }1 G% {% X; ^) a d' a
7 }& |0 _" j5 R: D% E
import matplotlib.pyplot as plt/ E- b/ p6 ]+ L
import numpy as np
6 T% I8 b1 z2 s, T6 y0 Lwith plt.xkcd():
( g& |% T) A9 k# b; w* [ plt.figure(dpi=150)9 S: x' F, ]* O; G8 l
labels = ['Jack', 'Rose', 'Jimmy']
+ ?, y, e3 M( B, D year_2019 = np.arange(1, 4)% A9 R* S' |) l$ i0 r
year_2020 = np.arange(1, 4) + 16 ?2 ^' H, m7 b1 E$ D1 w" }* h/ H
bar_width = 0.45 c* ^& ~" G- {5 I0 l# ^
9 ?4 P& e9 ~) L: K+ [) } plt.bar(' d, V! c5 H; {3 ~
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
. n% w7 X: u | o year_2019,
5 M7 \9 {- n2 W. _, P color='#dc2624',
& @) r$ ~0 f& j$ [: U width=bar_width,+ [7 `/ ]9 P7 b- Y u) }" m" P
label='year_2019' #图例. X- Y# c" {3 `( S. |! Z4 ?
) e4 i# a+ d6 Z8 w' ^
plt.bar(
\) I0 }, B9 Y, e8 g) e np.arange(len(labels)) + bar_width / 2,& \+ A% D7 ^2 ?8 @" t
year_2020,, Y7 n+ x+ @9 V3 ^' n# v% y
color='#45a0a2',7 }8 j' b/ p( H* E6 h' e
width=bar_width,
8 D/ `! G5 K; B) ~0 _ label='year_2020' #图例" M! y- C4 p" R( e1 D- T
)
( S( _4 P. g3 I2 C$ e8 e% d plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称
2 r) \4 _0 J& P9 ?1 a) I3 m/ D plt.legend(loc=2) #图例在左边: [2 w4 N* Y6 t: }# d. x6 I) S
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
0 `/ I w K8 u3 Z Z2 G9 m7 Z( ]( y' J. q; I2 x% N7 Q5 e1 m4 Z
% q" z' T/ H9 e
$ c1 ?! b5 S0 f0 g7 `* n) E% R
1 y9 M k, M, B2 R$ p" I
+ \7 g" B# s$ W0 ]9 G: l2 @. [/ h# j) n2 q$ b9 ^) l2 z
以下参考: Python可视化|matplotlib10-绘制散点图scatter/ f5 R, W6 s0 a$ r1 _
+ U" ~! o0 w; j+ D6 }9 O3 l, Y7 J9 x( Y) v* {8 S [
import matplotlib.pyplot as plt
# j/ n5 O& i) } p7 Ximport numpy as np8 R1 r! a; e! A; u, T3 }
import pandas as pd: I. L/ O/ z$ ^# t
from pandas import Series, DataFrame
% r1 @# S9 j& z, _( n5 o#数据准备
; r( A( z* t+ o% sfrom sklearn import datasets3 ~, X5 X7 X, K5 |) L3 t
- a% l/ b( q2 j9 p; w# }/ Firis = datasets.load_iris()
; v2 H) t5 |: w/ v7 c( \, a4 px, y = iris.data, iris.target% l6 G4 u+ d0 j" ~1 B& F' w
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
7 Z: w8 i. _: Z( i columns=[" W6 J- w% B- E' y
'sepal length(cm)', 'sepal width(cm)',
- f- S3 T' Y7 k* L. I5 r ` 'petal length(cm)', 'petal width(cm)', 'class'5 v' l; U+ f, n6 o* U5 a7 l
])
, S. g% t, c7 m: D; H2 C/ t9 Swith plt.xkcd():
7 z' p& ~5 i5 v) `* o' A+ u # I+ H( t# }$ y; p& i
plt.figure(dpi=150) #设置图的分辨率5 ^9 y# z' C* i" n. {
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图) m. h0 B- }9 w9 T( W; j' D1 A
iris_type = pd_iris['class'].unique() #根据class列将点分为三类, u6 d6 L7 t( J8 k- D0 @
iris_name = iris.target_names #获取每一类的名称
; `9 b0 o Y5 S" s colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
6 C3 `1 E7 O) r0 c) |6 o. N markers = ['$\clubsuit$', '.', '+'] #三种不同图形
% ^: w, g5 j9 `
. T9 K$ j2 U' c9 j& \: ~ for i in range(len(iris_type)):$ e- Y( C( [4 K/ h) _2 y& U
plt.scatter(' Q% x( [$ y' s, q1 p+ L
pd_iris.loc[pd_iris['class'] == iris_type,8 f: \! C) e% V
'sepal length(cm)'], #传入数据x
" l. U) i& m3 c' S/ B, c% R" Q pd_iris.loc[pd_iris['class'] == iris_type,
% p9 q$ h' M4 ^; N" r 'sepal width(cm)'], #传入数据y7 U5 s- ]. Q0 g" f. W1 G
s=50, #散点图形(marker)的大小
E) Z' r: ?8 m& e% {: p c=colors, #marker颜色
1 B# @! S$ L; z marker=markers, #marker形状7 B6 D, T. r8 {9 a, C
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
; ]0 m# X9 ~3 e P& C; A8 R- b alpha=0.8, #marker透明度,范围为0-1' Z$ ?9 i* e% @9 I6 C6 u+ e
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c; ]/ r( ^% }1 F8 X. h- r
edgecolors='none', #marker的边缘线色
- d/ z5 X7 X+ B9 G3 R7 F! ] linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用- V+ t( y4 T; D' B2 A* Y2 x1 m
label=iris_name) #后面图例的名称取自label
9 J$ o' V! s% ?% O% ^& m2 R
5 S/ l# a O" p& @: i- z# j8 J plt.legend(loc='upper right')
A% V; `9 e8 h4 ]/ P$ V- O( J! N: `; w' U
% Z8 Z+ B/ a! [, q3 K |————————————————
$ p0 S" N+ e; L: z" @版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# Y0 X' \& w8 v, p! F, k+ o( Z2 [
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753( F; Q8 o- D) y/ R/ R' w
; ?& l6 x D1 w: a4 q6 _4 {* l( `5 ^$ m: O! T
|
zan
|