- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563371 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174234
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
& j; `9 L; R& R/ U$ @一行Python代码有多强,可让图形秒变「手绘风」 S5 t( p; U# `
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具! M; V: z/ d& b6 ^. I- B
( P- g% ?& M d/ v" k+ M. W0 T# a5 h
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
( `9 b2 W2 P7 ]0 b! B$ f. I- ^/ [/ @& i7 P% v
7 V: X5 U% D& u9 W' _
matplotlib.pyplot.xkcd()简介
) r. C8 K0 }' |" n5 G4 U这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小2 q3 Z: G2 T) `, ]+ [5 U5 d6 F; o' Y% d
5 H$ y+ V5 ^( W s" M
; f& A& @/ Y- u6 M6 y; T8 wmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
, E' |3 Y% u* y0 {* l% T0 b3 k) n length=100, #褶皱长度/ _& m3 [2 b9 S8 G6 ^6 C: J
randomness=2#褶皱的随机性
* [; `1 k- d$ s( @& A+ c: k3 Z ). Q8 \2 s* n( d( J( t
matplotlib.pyplot.xkcd()使用- v( v: z: @* O
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
) q8 A2 o5 H+ y" I1 ~% W
: U$ I& e- n1 x" T" N2 Q0 I7 s8 V4 `* z! m" r! } H2 u
with plt.xkcd(scale=1, length=100, randomness=2):
+ c2 f4 o8 B: `: e" @6 q7 }#with是临时使用一下,不影响其它图使用正常样式/ M6 H/ n% G+ T: c+ Z* x
绘图代码
g2 S8 b- M6 G: ?( \ 。。。。。。" J* ]6 K5 l; S- B
plt.show()
; R0 [5 Z. m; b2 Xmatplotlib.pyplot.xkcd()使用实例 7 T* L& H9 J0 V- D9 \
下面代码为pythonic生物人公众号之前的文章代码8 x; H4 q# v& W
( h$ w( m# ?" Y1 o/ J
$ C- C6 B& X0 O7 O! h/ B以下参考:Python可视化25|seaborn绘制矩阵图# H& L6 B. h4 l
4 C& j Z7 n/ ?! B+ {: d8 Y8 o$ z
- x& b$ F6 h6 o _7 Z' r& [( I
#支持seaborn3 P) x; P; Z3 c6 ?
import seaborn as sns
, Q, [* M$ A4 Y' l% o% F' v) M/ Giris_sns = sns.load_dataset("iris"); W& l' w# s+ @5 [( ~
with plt.xkcd():+ X" ^6 v2 U$ l3 t
g = sns.pairplot(* i# W8 S9 J7 D' S7 F+ P
iris_sns,
# W' ~" _; h# ?+ ^9 t+ q! r hue='species', #按照三种花分类6 O0 m) L( F% m7 |# u$ z$ M
palette=['#dc2624', '#2b4750', '#45a0a2'])
# p- s5 S* ?7 }$ {* ?" ~5 z; s sns.set(style='whitegrid')
6 V( P, v$ r* F5 a& | K% m g.fig.set_size_inches(12, 12)7 u. }( G! C2 T' R: }
sns.set(style='whitegrid', font_scale=1.5)) p6 n* y& Q1 x/ U
7 w. N% w- i: Z6 M/ _8 h) y/ J
$ P. [3 v; H. t& z
" R/ ~$ I1 D9 u2 W# l* }以下参考:Python可视化29|matplotlib-饼图(pie)
9 ^3 ?. k% f% V. i+ m; h
& A; X) J% l& U3 G% ?. n+ T) W6 `2 \% d
import matplotlib.pyplot as plt1 b" m8 J% j5 l8 P; I! @8 O$ ~
with plt.xkcd() C* z X$ w# p" {3 c) }4 o
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度1 G' y8 X' S# E! w' G
length=120, #褶皱长度
& o3 Z; k4 K0 e/ J, P randomness=2): #褶皱的随机性/ T2 z: J7 C9 J' m: d6 m) n
plt.figure(dpi=150)
+ x8 b) _8 `8 q. l! k, A) [; `# m2 r patches, texts, autotexts = plt.pie(
1 }7 K* L! y& e- h7 w8 s x=[1, 2, 3], #返回三个对象
0 a+ ]4 N- S1 z- w labels=['A', 'B', 'C'],1 Z, |0 y! `& |, E7 E
colors=['#dc2624', '#2b4750', '#45a0a2'],) W. n' s6 w" t) S W
autopct='%.2f%%',4 x$ ?* {* v3 B5 {3 B
explode=(0.1, 0, 0))
# N* k* [( x7 N2 s' S7 n. G$ n- [ texts[1].set_size('20') #修改B的大小/ G6 a8 \$ z/ B, \2 E: P
2 G' J* S! W I' [0 F( I* ? #matplotlib.patches.Wedge1 w0 x: K. c U! D
patches[0].set_alpha(0.3) #A组分设置透明度
' P; [4 h f/ L* f( K. ~ patches[2].set_hatch('|') #C组分添加网格线8 v0 u0 m9 p- P! x8 X2 X) o: | t
patches[1].set_hatch('x')
' m9 V( l/ M3 D/ z# D , a4 [2 ^- @0 Y" v- L3 |0 G+ q+ ?
plt.legend(
3 @0 a8 y. z- D! |' r W$ J( k patches,
" K* \8 r8 E3 z( G1 g ['A', 'B', 'C'], #添加图例3 l# A& |$ H; g% ~
title="Pie Learning",
0 T. v# f6 q* c- Q: V( K& v/ U6 f loc="center left",
/ K. b& i- H. R6 u* o fontsize=15,
4 I( k+ ?/ d3 d bbox_to_anchor=(1, 0, 0.5, 1))# _+ ?1 _7 u0 T ]4 N0 P4 c6 V% r. a
# {! Q! G, s7 y) d- ?$ {
plt.title('Lovely pie', size=20)
. B2 O7 I& L/ z2 m plt.show()$ ]; |. u) o: d; M5 g4 y
2 u( v. `, G* ^2 i9 B& Q
/ J. n" U8 I0 i1 {
0 S! _( I8 M- Y2 K7 h. s: A8 b8 B+ e7 g. n8 e) k$ D
with plt.xkcd():
! f% P2 u. o8 i2 y) M) {* C, J from string import ascii_letters
5 j* }3 e- e; j& a, R0 R plt.figure(dpi=150)
* ~! V! H- X7 `% Y patches, texts, autotexts = plt.pie(3 G5 Q0 @9 k% h3 J @3 J, |
x=range(1, 12),
3 D$ w/ u! t+ Y labels=list(ascii_letters[26:])[0:11],: \2 F4 N l3 m( G
colors=[! `. ^# {3 Y: b' _ v# Y
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',& D/ U" j; P! R1 C% f5 D
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'- ^: R5 Y- v3 f% A+ V
],+ v6 A u* g1 f2 |' J3 ?$ o
autopct='%.2f%%',
: M! K$ L$ t" [ )+ w1 @3 P: i3 |; P
plt.legend(
2 C5 u2 n8 I& P patches,
6 |3 Z' q7 _$ ^ list(ascii_letters[26:])[0:11], #添加图例! s9 K8 O- K2 s8 A8 }2 ^3 H/ c
title="Pie Learning",8 z8 X- u, C% q- C6 u |$ k
loc="center left",
! y& e' g+ b8 R' F bbox_to_anchor=(1, 0, 0.5, 1),
/ ?1 ~9 p( V. J" R, s" |* y* n ncol=2, #控制图例中按照两列显示,默认为一列显示,
# e0 X$ Q" A: R5 [+ N5 n )2 A1 v% ^& T: H, c- A4 h9 r
7 P$ U5 b7 W0 j
' n4 a' H! Y$ e; c3 k4 e' T4 M* F
' X& ]7 F1 R, j3 ?% `* Q7 ~3 g2 P7 m# @1 d5 d6 f) c7 B
import matplotlib.pyplot as plt( |3 s! g+ g/ y, g j
import numpy as np8 R* _5 l0 d& j. y3 ~1 `
with plt.xkcd():" n, L/ c5 A E; H) B$ ~
plt.figure(dpi=150)
+ a3 V% c6 d( R$ i labels = ['Jack', 'Rose', 'Jimmy']
- [& d3 i9 N+ F# z* n year_2019 = np.arange(1, 4)
) c7 k4 Q. ~" X+ [ year_2020 = np.arange(1, 4) + 1" C, n/ D! l& F6 k* d" q$ N
bar_width = 0.4
5 T7 k8 g# q X7 @* S+ ^ 5 b- ~, g) g/ n/ j7 b+ X
plt.bar(! d p) F& k! I Z3 G" H5 W
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽/ |, @5 a1 o; d. K1 Y
year_2019,
- S6 t6 d! @7 A$ o: J9 [ color='#dc2624',
+ D5 f& D' B1 P- j width=bar_width,! V) a8 V2 U; t# w. {( {+ a& w
label='year_2019' #图例0 R. L9 y3 U5 l2 r( O$ C
)
2 V d5 P2 z$ _, p8 s C3 [- O plt.bar(1 l3 w7 Z3 u- S
np.arange(len(labels)) + bar_width / 2,
4 P0 ^2 G) J' F+ o1 k: Y; E2 U7 g6 I year_2020,% |9 c& ^4 H* x7 g7 S' N
color='#45a0a2',* e J* g0 Y0 q& _( o) G
width=bar_width,
) m6 W2 k ]: b% a$ E label='year_2020' #图例) Q9 U l; F: e0 o/ X
)% @( `/ e1 {# y# ?$ D
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称3 }4 }* h) d# D
plt.legend(loc=2) #图例在左边5 } Q6 N h, m% k. [
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
; F! M; P+ n3 J# Z9 c3 p1 k& k9 _# N# K. H/ Y) Q% E" X
' ^7 b9 s' r$ H! k" Q- v! C% w. O! K$ A
: j4 z! y, n* e& U8 o9 E# p
; F- N' k# l q! H5 Q3 B7 s+ u# _3 l3 V6 [: O
以下参考: Python可视化|matplotlib10-绘制散点图scatter
1 j- O, M" V2 U$ e1 J& S
! f6 ~% _9 a$ m. I
: r/ i' A# Q, eimport matplotlib.pyplot as plt. u! I" D: p; d G' e
import numpy as np# Z: ^9 Y# S. d3 g& N6 F ]
import pandas as pd$ ~* O0 y0 W) r' O: r$ {# w
from pandas import Series, DataFrame
) u- k( A* b- {" I3 p9 \: n* C#数据准备
7 }$ e8 {8 Y# w- X# K0 C: hfrom sklearn import datasets
w! H! w$ q4 z- i7 x" Z$ C* ], a
: ?4 A! S0 c* `0 `iris = datasets.load_iris()# y$ D6 G- g l) B/ N- ?
x, y = iris.data, iris.target6 ~* E/ Y! n/ V! l* g
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),' C2 y$ N8 ?5 X2 L, e8 A. L
columns=[
! c7 q0 d: W- ?. D- c: a% y T 'sepal length(cm)', 'sepal width(cm)',
$ }7 l! ]7 i6 d; h. f5 D4 Q* g 'petal length(cm)', 'petal width(cm)', 'class'! ?$ O- |- A/ y
])
. X6 C& Y9 b& Y0 X& v( ]with plt.xkcd():9 u& b. o2 B" y- ^) B
- p8 P5 ]# h% w7 B plt.figure(dpi=150) #设置图的分辨率
X: ^$ _8 Z7 t; j+ N, E9 I% t' k #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图$ x4 X1 x. `" }8 K( z5 G% L: m
iris_type = pd_iris['class'].unique() #根据class列将点分为三类4 {& {# y6 d8 X5 Y
iris_name = iris.target_names #获取每一类的名称. D+ F3 x: |% {) X. P, K6 E/ {
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色) i; q8 r& }8 q" U7 z( w
markers = ['$\clubsuit$', '.', '+'] #三种不同图形
5 @) i6 o0 |1 u7 F1 x
t/ I+ c, M+ l- P- x R, I for i in range(len(iris_type)):2 _9 ? d* w4 a
plt.scatter(
3 k& h } Y9 U2 Q' k0 I pd_iris.loc[pd_iris['class'] == iris_type,
( c7 w7 d- T( M 'sepal length(cm)'], #传入数据x' O$ b4 D! s% m6 C* x7 O
pd_iris.loc[pd_iris['class'] == iris_type,
: c' s/ }% a; k 'sepal width(cm)'], #传入数据y
7 [+ X6 C( Z, s! S; a. L' Y s=50, #散点图形(marker)的大小
! P7 J- E3 L, z) R5 j" } c=colors, #marker颜色
+ M, ]8 n& z4 V/ L1 | Q9 j marker=markers, #marker形状
2 l: B1 j1 j, B #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
$ I5 m2 ^% e( e alpha=0.8, #marker透明度,范围为0-1
$ Y$ M; l0 G- y' x facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
% u2 B4 }+ G1 j edgecolors='none', #marker的边缘线色1 D) X9 O% w2 h7 D N: J6 V
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用- I) j0 q$ t0 l
label=iris_name) #后面图例的名称取自label
1 p: @1 {; P" _+ B! ? & L @9 r' f& u" f+ x# b
plt.legend(loc='upper right'), Q4 i5 m$ c" o4 J
1 o" Z$ B G4 N- q& ^2 w* I0 Y4 B( T/ ]
————————————————0 A/ }+ n0 V, g, I" D! H# ?
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# M$ R) A3 @3 C) [原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753* t/ J1 M+ g; `" W1 O4 u3 o
5 P% W$ b* g2 Z+ }
. X1 P4 e& t2 o' c* H! P |
zan
|