- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566430 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175152
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
- E: ?, U( s. o
一行Python代码有多强,可让图形秒变「手绘风」
9 p2 Y; Q+ V" R' q% J之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具0 @. D: k6 x/ W6 F4 w* E
2 U( ]6 }+ a# r( h+ l
$ _- v6 T4 M* Z7 ~! \2 L$ k
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
3 p) c8 V( d3 a- g; W+ ]7 t/ r& e# Q; b. o. z% G t
( u$ a5 q% w" g6 Zmatplotlib.pyplot.xkcd()简介7 v. v) T& j5 J5 e- A: P0 @
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
% m/ ?6 }8 u% n. y, l5 X/ {( r: q! b8 r* K
" I$ j" X5 C0 B5 x- w; j
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度, m% M1 B H. J5 ]8 p, m
length=100, #褶皱长度( l+ V) }- j" s; m
randomness=2#褶皱的随机性
4 \1 p, a- w2 x$ J) p! V: L' Y )
- i2 D0 \7 F5 x" H5 P. g ]matplotlib.pyplot.xkcd()使用; q$ [7 u. l7 x. O5 a# r
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
: ?. v$ `( G5 z6 F* \( f0 x; Z
& I9 q! x7 G X% t9 Z% b/ ] b. l A8 S( A8 z! m+ l
with plt.xkcd(scale=1, length=100, randomness=2):
" [+ z$ W6 k( y! ^8 }; K. F. O1 ]#with是临时使用一下,不影响其它图使用正常样式
[5 N; l$ M- k" j! K8 {( j 绘图代码% [- D5 Q- X1 X, s9 @
。。。。。。
* H2 Y0 F. x. p- Y plt.show()! f6 T: z7 M4 C4 [' B
matplotlib.pyplot.xkcd()使用实例 5 ?2 {4 H- g$ j" @
下面代码为pythonic生物人公众号之前的文章代码 K- w# j! Z* J* }% p
6 B ?5 S; d" H# z- T
( ?# w' {/ }4 y5 h8 d. q$ d以下参考:Python可视化25|seaborn绘制矩阵图
7 H# ?$ S+ T ]5 C3 l
' ]& K; |' V1 ~, ~; Z8 ?% g+ `1 N8 q5 T" K0 l' G, t, G
#支持seaborn
! n$ G. o+ A X* U5 G9 eimport seaborn as sns
' ^! _5 Y' H" f0 Y6 N% T( Ciris_sns = sns.load_dataset("iris")
2 b" H$ R+ K% E# F- P; Iwith plt.xkcd():/ K. v! p; o2 R
g = sns.pairplot(0 Z4 J9 |3 C; Y$ Y
iris_sns,
& B4 f6 C9 K+ E& e. { Y% F hue='species', #按照三种花分类! C0 z: M, }. {2 Y* @
palette=['#dc2624', '#2b4750', '#45a0a2'])
" E0 Y$ t& A7 b4 Q sns.set(style='whitegrid')* k4 }, J- d6 _0 w' v2 O( B
g.fig.set_size_inches(12, 12)9 A) \" h" k1 m/ W1 g8 a5 u" V; O
sns.set(style='whitegrid', font_scale=1.5)9 |( B2 W" M- [( }
3 ?8 o* H& _: J! x, }& Y' ?
& T: a$ D6 j$ M. C9 f4 w+ X# @% Q. `- ~1 C9 A v8 T2 e
以下参考:Python可视化29|matplotlib-饼图(pie) 5 {2 u: q7 z& Q/ Y! h, S
+ j+ x& D- [$ s+ l6 d+ H
5 a" \: H( B: ^4 R. p+ H1 Gimport matplotlib.pyplot as plt
/ Z |/ Z$ o, W- \; U0 U$ [with plt.xkcd(& @7 Z( E8 p6 D& M5 @6 L# @+ U
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度9 {, E: b7 l! E2 u
length=120, #褶皱长度
8 P; Z1 x! u/ p7 h* D7 Q randomness=2): #褶皱的随机性, W' S2 h# Z' k' ~' ?$ x. b+ l+ m
plt.figure(dpi=150)
/ ~8 }1 _5 |4 m* L! z" [8 R patches, texts, autotexts = plt.pie(9 Q# ]8 I$ @1 v3 [! ~9 R, P! p f. M
x=[1, 2, 3], #返回三个对象" t. j, ~# ]; { j s& t
labels=['A', 'B', 'C'],$ o- w) A0 o) v. q- ^2 {9 K
colors=['#dc2624', '#2b4750', '#45a0a2'],
& }: x: S9 S$ n5 Y4 r autopct='%.2f%%',+ q5 x6 e, f6 t( w9 ?
explode=(0.1, 0, 0))
5 o- w1 y, l# M texts[1].set_size('20') #修改B的大小
& W8 B7 w7 Z% E5 M
, S% w# k! L" L #matplotlib.patches.Wedge+ E) ?+ C0 ` R7 S$ M! D6 \
patches[0].set_alpha(0.3) #A组分设置透明度) P: ?; X$ X2 o% e3 D
patches[2].set_hatch('|') #C组分添加网格线0 x. r9 E6 p" a3 [. E+ H
patches[1].set_hatch('x')
$ v9 O) t2 ^( `$ A2 F# P
: S) j" h2 B1 q/ V; ~" z plt.legend(8 C: L/ Z3 s0 O" {5 r/ ^' @
patches,
! ]- Z- x$ C$ X: K0 m+ _ ['A', 'B', 'C'], #添加图例
" a7 D( p) t3 T6 L+ Z, Z+ R title="Pie Learning",
7 V, \. `+ k% X3 w9 y loc="center left",; Z+ W0 y* P2 f7 M0 k
fontsize=15,- }( u& ?5 L: M7 O+ r# S& [
bbox_to_anchor=(1, 0, 0.5, 1))" H; K) [- P( _& F) O% L' _
0 g' A8 ]; Y n @% H4 ~5 L* j- _2 ? plt.title('Lovely pie', size=20)+ V2 L4 S& Z& i
plt.show()
1 H1 k9 v# G0 V2 A! x& {- A6 {/ S# Z( T+ y8 r' ` x g* Q6 C
3 Z, ?/ g2 x+ {! |2 j" P; f3 y/ J
7 i6 G( {3 \ R# M' a4 k0 c
7 u2 f$ p) H; u- M1 D. W7 w5 gwith plt.xkcd():
/ T+ K, j9 j; s: i8 V from string import ascii_letters5 m# C" u/ j+ y# m6 C% G) }# b
plt.figure(dpi=150)! p) N. G8 t0 y5 d% d. ^, \
patches, texts, autotexts = plt.pie(
2 A) Q$ T- y6 T# [" K9 t x=range(1, 12),! Z* N7 A2 i' w5 x& L
labels=list(ascii_letters[26:])[0:11],: y7 C7 M3 J3 N
colors=[
. J/ P8 c6 e; V8 X" } '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
0 _5 W3 ?1 \$ w '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'7 u* ]% e& v( V5 q% @) M, W
],
0 N' z, n9 @1 c5 @ autopct='%.2f%%',( N7 \. ~) }& W: m' Y3 E0 W) L
)
- o8 N: z }9 b/ {, R' {2 f) @' Y9 a plt.legend() N0 b5 I- i! l y1 ~# @# {' L
patches,
+ d( A2 R$ q& c; o# B. g list(ascii_letters[26:])[0:11], #添加图例
2 Y) T7 r6 R; Y+ t4 [$ H title="Pie Learning",- |- O/ p' a/ A7 d0 T ^; P
loc="center left",$ G/ P5 i5 c; F$ g( j" k' a
bbox_to_anchor=(1, 0, 0.5, 1),, _* x7 s$ U W
ncol=2, #控制图例中按照两列显示,默认为一列显示,
! M2 H: l! h! ?$ ]: B7 Y+ J )7 \9 O- i. q! b6 ]' D' m$ j
1 O- N6 c! A: C$ o0 y; a# M5 k; P0 J& T% V" y6 V- `8 K2 C- t
8 b8 M" i5 p, U& d/ ?
2 v* I4 w, l, d# }" a9 D& [
import matplotlib.pyplot as plt
/ R. ~! I; S2 t& t) |import numpy as np5 l5 m! q; k- V' P8 Q x
with plt.xkcd():
?; O( K" X& Z2 C# C6 h plt.figure(dpi=150)
. b2 ]3 u! g4 o7 C6 l5 K: V labels = ['Jack', 'Rose', 'Jimmy']
D+ V1 O1 I* |" \ year_2019 = np.arange(1, 4)
* V& M: A, ~7 C( c7 d year_2020 = np.arange(1, 4) + 1
* J- k% ?5 m# ?/ y: m, }0 u! D3 D bar_width = 0.4
1 K# ^+ A, |7 W P! K0 e- }$ Y9 |, O
) K0 R6 ]' p4 r) d. K. N3 L b4 q plt.bar(, D5 O% R9 _& ^6 v! P, f
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
! |! b/ v1 x8 O9 y' C year_2019,
; p- K. o1 g6 \& D5 ^; } color='#dc2624',
% T; f, O) B; A8 {. b5 L1 a* `$ d width=bar_width,
5 w. k: Z4 J- I6 U, R label='year_2019' #图例5 a. m5 s9 z' D& S; e; d
) ?& e# |, T: R$ [
plt.bar(5 Z# ?9 V3 C& ?3 b/ u5 m7 g0 D8 y9 F
np.arange(len(labels)) + bar_width / 2,; `) D% g3 S4 S, t: c) w, n
year_2020,8 G2 H4 ~5 J. ?0 w
color='#45a0a2',
" y* E3 z) Z' d9 s6 @0 ^5 q& R8 k width=bar_width,
% p" w: w% e7 C% t0 q: {* a/ u label='year_2020' #图例+ o0 @+ _- f% e0 Y: ^
)6 |7 J, O3 R# D$ ?* A
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称- E# X% m3 p8 ~ }# n+ s+ d
plt.legend(loc=2) #图例在左边
6 B' p' H1 o. i4 }# |) Q/ d% x以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 ) y: b: Q8 ~; ]5 _; g) N
4 ?# @3 c! l$ M; x& [) U) V2 W4 J0 a4 ?. A8 _' ^, M
9 a9 F9 G2 `1 X4 L
# D( G- k! K/ I; }% P3 U$ h5 U6 j
& q" ]! |' m- a
以下参考: Python可视化|matplotlib10-绘制散点图scatter! D% U$ f+ k W& M" P+ ]
# C: W# k! d% t# X* q4 z* l$ D& F5 l& C+ G
import matplotlib.pyplot as plt" ^2 y5 k. o/ l
import numpy as np+ a+ L/ i, U9 p* g5 t
import pandas as pd
# I+ {9 o1 d: r* J$ J1 wfrom pandas import Series, DataFrame2 R( f |6 ^$ K" F/ c, r- j
#数据准备+ t. a2 o3 U( p6 h( _
from sklearn import datasets& J* A# T) S8 |% G$ j
2 t- \+ O! V/ C. i) y. @iris = datasets.load_iris()
& s$ b% k/ C8 o6 N1 a( Wx, y = iris.data, iris.target
4 {+ i8 q' [2 v' ?& j# L# hpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),3 _" X( h& q3 L9 H4 i* W7 y- I
columns=[
5 z0 d ?; Y! j( i' ]& Z 'sepal length(cm)', 'sepal width(cm)',+ a' o$ n0 D8 X* A& A
'petal length(cm)', 'petal width(cm)', 'class'8 C! o$ q" k& Y4 _( E) L+ {
])2 _, e; V6 s9 M, J' c1 ?
with plt.xkcd():0 z$ l! e5 B$ E4 e1 U
* F0 i9 B% V6 q3 u' C* n
plt.figure(dpi=150) #设置图的分辨率. m# \. u1 I9 j2 O
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
) ~* a/ Q) u: i& p iris_type = pd_iris['class'].unique() #根据class列将点分为三类% i1 f$ u2 o2 l# h( W- L
iris_name = iris.target_names #获取每一类的名称
% l4 m' [3 w# @# P9 v colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
5 }0 I7 o' h1 L6 p! Z/ N markers = ['$\clubsuit$', '.', '+'] #三种不同图形; S' J6 K1 u3 `& e5 O2 h7 `
& m' B$ G5 R1 o$ a- P for i in range(len(iris_type)):. J% ?* B; z1 H7 y' j
plt.scatter(9 V( u9 Z: J5 Y$ {; T! j: @
pd_iris.loc[pd_iris['class'] == iris_type,
]$ F4 J' H. ~- {1 W 'sepal length(cm)'], #传入数据x
3 ], u1 t/ a+ S pd_iris.loc[pd_iris['class'] == iris_type,+ ?2 m1 e" o, v: N0 }! f
'sepal width(cm)'], #传入数据y
+ I7 `4 B+ }; t5 x2 l s=50, #散点图形(marker)的大小
4 L! V' A* y$ H% Z c=colors, #marker颜色" i2 Y5 z& M5 E) F: u
marker=markers, #marker形状4 y, F9 F& p5 B7 e& n2 V1 i) q
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充; e9 \: v4 E* S# }
alpha=0.8, #marker透明度,范围为0-1
* b' q/ F* @! a; w+ f facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
# r6 _8 ~$ @7 Z9 B/ L! s* G edgecolors='none', #marker的边缘线色
3 | ]- U; ]% Y2 _ linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
3 G a, V4 |6 T( f- } label=iris_name) #后面图例的名称取自label
" k7 L" i4 X) s) O) L+ D
& L+ k3 A% H" @$ g plt.legend(loc='upper right')3 N0 E' F e* y
2 ^: M, z! Y" o' j* x. Y3 q I S# q# Y4 y+ L) W
————————————————) u6 n- o% L3 h
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- t5 e- q) _+ p+ |7 }原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753( E0 y, Q* w6 z3 h8 n5 e' T4 ~- G9 I
4 _% F5 N" m4 N7 a2 d; c- h
$ i8 b( T. C! x e' { |
zan
|