- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565359 点
- 威望
- 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年大象老师国赛优 |
9 ]9 k2 s, Q- L1 u# O1 B一行Python代码有多强,可让图形秒变「手绘风」
# L7 H3 J2 k& p7 h5 k# X之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
( e1 F! ~5 p4 n q
' E! _' o, T8 ], T6 b
- K4 f( b# A2 p3 [但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
* Z. w1 v9 x5 p: P) Y( L" W; }
7 V5 @/ j0 h0 x3 Q4 Y+ R( K
$ a" H/ X# P$ n O1 ^) O' Mmatplotlib.pyplot.xkcd()简介
$ Y& H6 ^1 H4 a. |* i这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
# b2 t6 ~. H' K- j3 D. v" l! c* D; H! m$ Y0 x/ m" }
# }4 ?, b; b' h9 y. N8 F
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
8 ~+ K+ W6 p4 i7 U% a# A1 u( S length=100, #褶皱长度
1 j5 G, T; R7 D. z; B8 U6 C randomness=2#褶皱的随机性. s4 w! u0 d7 t- P, H
)
* H* f" t. \/ k9 C7 Fmatplotlib.pyplot.xkcd()使用
8 P' q% b3 b0 c如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
" Q3 J/ a2 D6 w; E+ o1 q( t" R' a; B1 s0 Z
! I* N, K5 }; w4 U7 B* d" h6 ]' D* m) owith plt.xkcd(scale=1, length=100, randomness=2):
% A9 x# \6 N. k#with是临时使用一下,不影响其它图使用正常样式
/ u2 d5 d/ W) o 绘图代码. t# k/ Y2 N6 @. v1 L8 X$ o& r) r8 X
。。。。。。! ^! }0 W) c( L1 b* e! g' x
plt.show()
$ Y. X- X3 C: @' F1 w7 Qmatplotlib.pyplot.xkcd()使用实例
% ?( ^4 a% I |) d9 I t( p1 j下面代码为pythonic生物人公众号之前的文章代码% d' ~" H8 ?" ^7 p5 X9 {
) x$ p1 i5 ?: J# H$ I$ b8 M, L& U! ?
) h# m1 ?9 Y' k% E; a4 ?
以下参考:Python可视化25|seaborn绘制矩阵图) S1 h: _4 H- b I% ^) v
, n0 r6 u, }5 O; Y' q9 S
* C2 H# c* F" e. q1 f#支持seaborn
: p' U6 J3 T& \# j! W$ H7 `import seaborn as sns& _4 U$ p- f3 R
iris_sns = sns.load_dataset("iris")
4 [0 _% s. N' N# Q wwith plt.xkcd():; k; q ]6 y& Q% M
g = sns.pairplot(" t% j$ v4 i7 V. R( V' X
iris_sns,; l9 \! [! [" o/ [$ @" f3 F; c" Y+ q
hue='species', #按照三种花分类
7 e( Y& S/ b* w palette=['#dc2624', '#2b4750', '#45a0a2'])
. {) k/ W7 N/ ^3 A% }! F sns.set(style='whitegrid')
7 t$ @' z# B' l- t g.fig.set_size_inches(12, 12)- I9 q/ Q" p) c
sns.set(style='whitegrid', font_scale=1.5)# p" J W3 `6 W. [! [1 n
% P" P1 S5 X3 L3 A" H6 Q
Y3 ?+ K ~' W7 y+ O! o0 e" o5 b% w/ [% X9 |
以下参考:Python可视化29|matplotlib-饼图(pie)
0 n2 v0 p7 d7 a. \; r; j
' J: F( {5 \0 s+ T* K8 y& c8 k
. @2 i1 t% G& i% F8 timport matplotlib.pyplot as plt7 s _) B( [, P# E' }0 `0 v
with plt.xkcd(7 m* P7 A6 z( c2 ?# g
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
' B, C) f6 g" ^1 P length=120, #褶皱长度
' W# O4 n4 u1 l r; B randomness=2): #褶皱的随机性
0 m: P' d" M! Z: z: J plt.figure(dpi=150)
' @% b8 ~# U$ l patches, texts, autotexts = plt.pie(
0 U( Y8 ^8 s& B x=[1, 2, 3], #返回三个对象
* B$ L* f. ~1 x( R i3 @4 O labels=['A', 'B', 'C'],
/ m0 m; ~3 E" ^8 w9 f$ J5 ~) Z colors=['#dc2624', '#2b4750', '#45a0a2'],: y: u; j: ?+ q8 M; I: t0 n& x
autopct='%.2f%%',5 I7 c- G m2 N; p3 L
explode=(0.1, 0, 0))
3 W' f- T0 x- |1 j0 \. v2 k texts[1].set_size('20') #修改B的大小1 Z) p% w' d1 I, K* Z1 n
% R; v2 c# ~9 `9 B9 S6 t K5 c6 E) p
#matplotlib.patches.Wedge
; a1 U9 m0 Y# V patches[0].set_alpha(0.3) #A组分设置透明度
6 ^* T( q& ?0 o9 u! u patches[2].set_hatch('|') #C组分添加网格线
7 M/ M. \( N! f6 s! v- Y patches[1].set_hatch('x')4 M: I0 e9 `: X8 f/ R1 t/ I" I
0 m- y* T/ c/ t( P
plt.legend(, m3 O# i6 o+ J! s6 U6 w
patches,
/ [3 }) K: D: C ['A', 'B', 'C'], #添加图例' t; p3 s+ e% K( G6 a. p
title="Pie Learning",* D5 e" j- @1 S: v% N$ ]3 D
loc="center left",# J8 B2 |/ n/ I3 a) D3 s4 B; g
fontsize=15,
! Z& Y/ q6 F' e6 T bbox_to_anchor=(1, 0, 0.5, 1))
. _ `6 t5 Q8 |9 H) J1 r" R
/ N: c8 p( c2 `8 A0 x, E4 f plt.title('Lovely pie', size=20)
8 |7 ^3 a7 I/ A2 ]- F# A plt.show()" {3 Y5 z- d0 x- g* b$ p
$ J( t( p) O- O. a0 [
& O& } l- @+ Z& z. y
~# F( p4 E. F- j+ ?3 c: ^6 c, n | P3 \( ]+ Q' V1 _' E
with plt.xkcd():
, _# q! J! w3 X w1 Q- C from string import ascii_letters- ~0 ]. H; k8 @) S
plt.figure(dpi=150)
! k9 R( j Q1 E' Y7 y" f patches, texts, autotexts = plt.pie(
4 p3 h* u- Z3 H/ B6 G! D) y: j% v/ _ x=range(1, 12),4 H$ Z. Y% }9 V% F- L
labels=list(ascii_letters[26:])[0:11], `: s7 x$ @% \
colors=[
2 {7 T9 {* I4 D K' c' c. V1 T '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D', L: y7 P# V2 p, `) O5 x3 t% U
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'; P& q9 u% F) b# T
],
. y7 h# V+ P- A- T ]8 ~ autopct='%.2f%%',
6 U1 h. u e- A )
) z# b# t( a K; n: @/ h3 B& u plt.legend(6 q5 B! k' {: f! A! H
patches,
$ L: `6 i; I" [ list(ascii_letters[26:])[0:11], #添加图例+ L* l% C# n* }* V5 N8 M9 ^1 z' c
title="Pie Learning",
& F- N' R5 c1 c/ @: Q3 K* u loc="center left",4 F' o6 [- q" b4 x
bbox_to_anchor=(1, 0, 0.5, 1),
( S" Z4 G" B) N/ t) m ncol=2, #控制图例中按照两列显示,默认为一列显示,
6 g: D4 a1 `6 F8 b )5 y* h6 t1 m, m5 d d5 _) m1 s
: x5 J5 c& D4 S5 I2 L& I0 O9 I7 J1 b9 P
' [$ H# f. J- Z7 N; A: H( {3 Y& ]: C2 M+ s
import matplotlib.pyplot as plt
& y' V) H9 G5 {& d- ~8 d! Kimport numpy as np* U" g$ P6 g; h& o; [ g
with plt.xkcd():/ ^/ O0 Q1 a5 b
plt.figure(dpi=150)
5 C/ ?2 G/ t8 }- _8 }* [ labels = ['Jack', 'Rose', 'Jimmy']( G: W6 V) `, b, S
year_2019 = np.arange(1, 4)
! W* {0 q% N' R* N) S" O/ i year_2020 = np.arange(1, 4) + 1
+ T. f* u$ A- g' }/ Q! J bar_width = 0.4' g5 v/ m6 \) [4 Z" N; x p
2 I7 o, x, }1 T$ e, i) H, L# w4 B: T5 \ plt.bar(9 q* r8 C& D# \% m- F/ h' v" W
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽3 F- M; f" l- e3 q9 d4 O" @
year_2019,4 B- k f/ m( I; K$ m, L; I
color='#dc2624',: M( N( l) F* q) p2 B6 O% n
width=bar_width,
# t* L/ t7 Y# ~8 u) I label='year_2019' #图例& ^) V5 o6 l4 x
)' n8 o. j }% L) P6 n
plt.bar( m. Z9 B5 v! o* S2 S! N; ?$ e
np.arange(len(labels)) + bar_width / 2,
7 \& p, _/ Y% i# U( } year_2020,
$ ]. ~# F+ R5 \5 W, } color='#45a0a2'," z0 E4 A+ d& L( E0 R" h, N3 L
width=bar_width,
$ N$ A0 v5 P3 ~( ?( C& n; u label='year_2020' #图例% ^2 _, t" q0 ?5 B
)
; P; g2 \+ g5 n# b7 m( f- D plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称( j/ o5 V+ L. w+ _6 X3 D
plt.legend(loc=2) #图例在左边! g4 S; p7 E! G0 [1 m
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
V( z* J7 ^7 F
5 v9 R1 d/ \. O2 m2 T4 F6 Q2 U# P# t
9 p) {2 _5 N1 H U# w8 C, n+ u' B
; ?% c3 b9 z9 q" k2 t, ^5 \( P4 l; W9 K- P
( | D7 T% K% g% [" a9 V) y
以下参考: Python可视化|matplotlib10-绘制散点图scatter
6 I1 @) w9 H: V% x3 j! w8 }& |" E' q) T% D$ M, ~; l- s/ d
( I" a$ u# }# W: X
import matplotlib.pyplot as plt
c" l; p; _1 W {2 W- q! K) U* Uimport numpy as np3 ?" B# W/ ]1 |
import pandas as pd; n8 s, @, W( Z0 X/ ^# P
from pandas import Series, DataFrame* ?4 x+ [. F* e: N
#数据准备
6 v m8 m" F3 k. X# Bfrom sklearn import datasets Y% F6 C' P, x+ e& e
4 S" G; k( b- F" B. S" ^iris = datasets.load_iris()
6 Z$ o6 B- N) w" Dx, y = iris.data, iris.target
/ O& M( g/ M$ H: b4 U& s/ N" R% }pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),# e; _8 I5 G: N: V- D3 H$ u [$ {
columns=[
, y. X! s7 ]. h* N; F3 L% F 'sepal length(cm)', 'sepal width(cm)',
6 U# J5 X, C* G8 H; J' R1 k 'petal length(cm)', 'petal width(cm)', 'class'4 o# y7 A! F1 B
])' {# m; D/ q+ c3 x# Z6 |
with plt.xkcd():+ w, H: u" X% q3 Z* c, f& G& S
, ?+ c# v3 b) }8 d8 _( {8 Y
plt.figure(dpi=150) #设置图的分辨率
" V; ? z$ e* Y6 d! _0 x0 Z# s #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图) |. i% `: P A5 u; w! R
iris_type = pd_iris['class'].unique() #根据class列将点分为三类
7 ~) b" c( }' O$ j; y' w iris_name = iris.target_names #获取每一类的名称
: J g0 ?. W1 P7 ~ \ colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色- L/ @; v$ E5 P# a' |" w" t9 I4 r& i
markers = ['$\clubsuit$', '.', '+'] #三种不同图形1 g9 B0 l9 X- j+ s& Y) m
7 z# U% r( L9 u" V% y0 z1 B- r* Y; P for i in range(len(iris_type)):3 q2 O; k% P! V$ p) h* G, e h6 d
plt.scatter(& y- d1 D, F- f
pd_iris.loc[pd_iris['class'] == iris_type,+ L4 ], O, Y' A0 `* u1 h
'sepal length(cm)'], #传入数据x! T1 a9 {3 g$ u# {
pd_iris.loc[pd_iris['class'] == iris_type,
! i% V/ Q+ H7 I9 b) Q* D 'sepal width(cm)'], #传入数据y/ V( k* T' u: L1 @4 x2 W& V. P
s=50, #散点图形(marker)的大小
- W* G2 z7 w3 q7 H: Z c=colors, #marker颜色 \/ [+ S# U+ B2 P% H3 F5 e: Q
marker=markers, #marker形状
* c: D" v3 V4 u" E, [ #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
5 F* C6 p# n1 [8 k" f! N alpha=0.8, #marker透明度,范围为0-1/ ]( K1 B, z+ C0 L5 o8 l7 e: n8 Z
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
' s4 u- X9 E! h) Y1 d edgecolors='none', #marker的边缘线色7 i9 s3 t3 M& h
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用; h8 ~$ \' v' M$ s
label=iris_name) #后面图例的名称取自label/ N0 H7 V# |0 O9 B6 _
$ a) f: G' z o plt.legend(loc='upper right') u# {! e$ q2 U2 d9 t
# i1 ~# y$ P; F6 I7 _9 B, j
3 u6 n, ]: B3 x' |0 b0 x————————————————- u$ c/ `1 P/ e
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
! q* H7 u" v' @原文链接:https://blog.csdn.net/qq_21478261/article/details/1189637533 i w- t6 ]- O; y9 r* S3 ?6 P/ B
- ~9 I: F7 x7 R$ g& k; s
; w/ B4 Z6 @# O+ m+ G' ~5 s |
zan
|