- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563383 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174238
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
5 \9 g* R& N4 Q
一行Python代码有多强,可让图形秒变「手绘风」( D0 O$ _ ]+ l' y" z
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具! x$ a0 y8 l9 Q2 I2 n3 ~/ Y* K+ G
. V) [" u) j+ P& C' `! \! D
; a% I# q+ p& w+ D' D但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
1 K$ |% g# I$ b8 N( C* }) j# |3 a6 w g7 G& q. {
7 B$ x% G* j7 e5 _+ _5 @! N
matplotlib.pyplot.xkcd()简介
6 p. d% T6 e7 ~7 Q这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
) ?' R1 ?8 M- a( H
2 T, H2 u h1 X: V% J v8 I9 Y: {! X- C: T# I0 S/ E! F/ W
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度# i- a! I5 I1 r2 F7 }% v3 l/ w
length=100, #褶皱长度
: K8 ~8 \, M! z$ R3 V/ C2 _8 z1 F randomness=2#褶皱的随机性
' X. r# ]' _9 ?& |) [ )
7 g, q2 E r( V- zmatplotlib.pyplot.xkcd()使用4 b8 n. S) V# X4 q8 t- ?4 P, E
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~( N8 M2 p, k6 W" l
' Q4 @( A; Z3 \3 e* _
4 c5 M/ F5 _9 D! `2 m& O0 `
with plt.xkcd(scale=1, length=100, randomness=2):
* u% G$ K9 W4 t5 w: W q#with是临时使用一下,不影响其它图使用正常样式2 T- K" T* @8 h' q% a
绘图代码0 D R7 f6 Q4 J# n+ f; U
。。。。。。" e1 V1 z1 C+ }% R" }+ R
plt.show()
( ^, @1 i: s+ |+ e; ?matplotlib.pyplot.xkcd()使用实例
0 f/ u2 o+ F' |7 P% o- h下面代码为pythonic生物人公众号之前的文章代码$ B: f6 s( y8 ^$ O
# k- G0 l1 Z4 {) A, D$ z
2 M r5 E0 a* b* O# ]以下参考:Python可视化25|seaborn绘制矩阵图
) C, `3 m# T- Z: W, C1 o$ ~, E4 r" M. _9 n! Z; E
/ ~) P, d9 h) X2 @# {
#支持seaborn
6 D a- W- X& W. simport seaborn as sns
/ i9 X2 Q4 c8 S5 s/ ?* Tiris_sns = sns.load_dataset("iris")
. g+ Z2 P+ k; Twith plt.xkcd():3 \" `5 W- N Q3 `7 d7 u5 w
g = sns.pairplot(9 o7 ^$ }7 D" g+ B! H& W
iris_sns,
2 b* g* P( D6 _6 N: D; v- n2 l/ Q hue='species', #按照三种花分类
+ t. o: w+ W ` palette=['#dc2624', '#2b4750', '#45a0a2'])
( c" }# W2 `, F4 D; P0 Q* x sns.set(style='whitegrid')3 A. b: Z: R1 p
g.fig.set_size_inches(12, 12)
9 I4 ]/ A8 y- T sns.set(style='whitegrid', font_scale=1.5)6 h8 {, K& }& ~. ~1 M4 h
) |' m0 b6 X3 D$ N6 P$ z7 u* J1 i
- \1 k( t% z. B% m
% w% t- P. E& |! c0 r# o以下参考:Python可视化29|matplotlib-饼图(pie) : J: Y# i" {' }& C4 J% S& M2 w
! Z k$ P! p: c( {) F
* {( e, v. Y, s8 H# {. _, S" ?import matplotlib.pyplot as plt# q- B3 x6 _5 y( z
with plt.xkcd(
3 Q/ v$ Y" K: R0 V5 f* _ q scale=4, #相对于不使用xkcd的风格图,褶皱的幅度/ k6 Q* z+ P$ N
length=120, #褶皱长度! z' p& l! L" K8 i6 i6 s
randomness=2): #褶皱的随机性+ d' y3 A+ r' l: X
plt.figure(dpi=150)* K6 D, L( ]2 z2 E) h- [
patches, texts, autotexts = plt.pie(! }# k G$ z( D% c3 P/ W
x=[1, 2, 3], #返回三个对象6 m- M+ h* G! {
labels=['A', 'B', 'C'],
3 |7 E% Y0 t& r colors=['#dc2624', '#2b4750', '#45a0a2'],& j. g! W( t. m$ K
autopct='%.2f%%',( b6 X" n8 k2 @
explode=(0.1, 0, 0))
- ]6 d' q4 |- \0 ~4 x1 {! v6 M- F. ] texts[1].set_size('20') #修改B的大小
o- B) v6 ]7 s ; u P/ ~! m8 k; H) Q
#matplotlib.patches.Wedge
" D0 m! w6 [+ N% r) q1 v patches[0].set_alpha(0.3) #A组分设置透明度
2 l! }1 C1 [( o# F$ W @ patches[2].set_hatch('|') #C组分添加网格线
8 ]: @ I# z: e9 ^! n# f/ @& A7 u! Z7 g patches[1].set_hatch('x')
" N7 M0 N; N# Z3 t + d9 V& o' F! D1 i
plt.legend(2 Z6 x# e1 w, d8 c6 k
patches,
3 v2 Y H9 F, f' I6 p* J ['A', 'B', 'C'], #添加图例
& ?1 `! g1 {' _( e9 `: Z title="Pie Learning",' K: t$ e+ H O7 `
loc="center left",& z$ _6 q, f3 Y2 }( Z: J) a
fontsize=15,
3 w% E' Y: f$ G4 N+ } bbox_to_anchor=(1, 0, 0.5, 1))
" u# O4 h2 k0 Q$ N8 l : r! \6 D% }. ^: o
plt.title('Lovely pie', size=20)
. I9 \3 b& K& F9 f4 y; { plt.show()+ c" W2 [" x) {3 Q" z- S. z
2 q8 [/ k4 p1 F! t) N5 r8 a% P& d- M, `" Z$ L8 p
' Z c; }- P7 C1 S: P
9 S& f9 ]& b8 `% K3 K6 F
with plt.xkcd():4 l& G9 S% J) d# W2 r* f; o- E
from string import ascii_letters- [+ z. i U1 G$ M5 U3 ~# y v
plt.figure(dpi=150)6 E+ o/ i, Z U. }8 R
patches, texts, autotexts = plt.pie(
" G7 w8 I' |; Q( m, g. }' O x=range(1, 12),( C9 j o# A8 h! T! m" E
labels=list(ascii_letters[26:])[0:11],
! ]) {0 F7 j3 a4 l) M4 Q5 y colors=[
+ c5 q5 ?$ l, `9 b '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
& j% z7 g+ Q# v, O+ C8 g4 a '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
$ k# q8 C; Q% B, D ],
5 U8 ]5 w. P+ z, {$ p+ `" W' o+ Q( Z autopct='%.2f%%',
; S. n: n3 Z3 n )
. I3 T1 m- [4 z; f% t8 [ plt.legend(& P5 Q$ @* Z3 h- r9 i5 f
patches,# q, _4 K% ~ B/ Z; j, u
list(ascii_letters[26:])[0:11], #添加图例6 b* s% I( J; ?' L: U
title="Pie Learning",
0 U5 B: J9 R* A, D4 M loc="center left",
7 |3 N. o8 R, y7 h+ Z. f bbox_to_anchor=(1, 0, 0.5, 1),4 a1 s- K% }# E9 z# _7 |8 p) G+ H! O
ncol=2, #控制图例中按照两列显示,默认为一列显示,3 [9 c3 ?& ?: O
)
1 [6 v- c$ m8 Z* U+ q
6 \9 d: o; I( M/ k8 _( P' ~+ s4 b
: y% I; f; h* f- k: O1 W9 `
* o) G5 x4 r4 ^* nimport matplotlib.pyplot as plt
- z$ n$ E5 t* x/ Ximport numpy as np
$ D; z. }* \, z0 G& C5 e4 `5 Z( cwith plt.xkcd():* [: p# Q; v/ b0 P# A9 d; j- [
plt.figure(dpi=150)4 |9 M Y5 X" V" I! ]3 b; U
labels = ['Jack', 'Rose', 'Jimmy']
# s& g: L1 j) G* D! n' R year_2019 = np.arange(1, 4)7 q" F8 W" K; B' T, \8 f
year_2020 = np.arange(1, 4) + 14 Y( j6 R; ]6 C: i
bar_width = 0.4
2 n. ^; j; J# m! K: P ]2 p. b
& A, I! x- u6 h: z plt.bar(
1 f; e$ w" d( w p np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽6 p! d9 f3 u- E7 ^
year_2019,
) r3 s3 p* X# ]( P" O4 J color='#dc2624',6 _5 G% v' W4 s+ z! O0 P7 r
width=bar_width,
+ l5 o) Z' e% O$ o( J3 E6 B label='year_2019' #图例; u+ y* X& l8 g5 U+ O0 w; V$ v5 T
)
! n2 C9 a3 W$ W6 j J! e plt.bar(
! H( M, W4 D, Q0 o- H W np.arange(len(labels)) + bar_width / 2,; E5 }1 Z3 }5 v5 c- D: H& A
year_2020,% }9 O1 p; [' Z) ^$ z6 }: P
color='#45a0a2',! v" C/ [1 B ] m& J
width=bar_width,& }5 n E1 r) ?: P
label='year_2020' #图例
& _9 x1 ?3 v9 W )! [: S2 w R: g6 ^# B+ ~: S, Q! ~
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称# B9 }$ s$ m, y" x
plt.legend(loc=2) #图例在左边; v; j0 @1 Y w# j
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 * l" V( E+ A/ F
! Z) M' J' v$ u x; ?+ k, U; L" K$ k( ]% O' B, O; S( h% U% k
+ ~( `, {7 J& }
D% R: z! g" u+ b' D& u7 w
! F( s$ V7 S4 }4 g; K" ?; j A
) T2 J! L' }+ ?, R# y7 F7 I8 s
以下参考: Python可视化|matplotlib10-绘制散点图scatter1 [4 h) q% a; x
; [- ]: R. i1 [" n2 F
0 `, M; K/ ~( U" D4 I' Fimport matplotlib.pyplot as plt4 f i3 m9 [. C1 ?$ z* D( {- Q% _
import numpy as np) u @: X/ L) G
import pandas as pd3 _. I3 }) o- ?, G0 z
from pandas import Series, DataFrame% ?& \5 _5 h& b5 q- K' r
#数据准备
' g+ U' Y8 A! n2 Z1 T/ }from sklearn import datasets/ W$ b& c/ Z! E( I+ A q+ U
& ]# Q4 {+ k S; @0 @/ K d8 Liris = datasets.load_iris()- K' X& L+ t. J3 C/ V0 J9 y
x, y = iris.data, iris.target2 \3 |+ y' ~; ^0 t
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),% m' U" h, k; V2 o/ @9 g. {; V
columns=[ d% p b! K6 ]: U
'sepal length(cm)', 'sepal width(cm)',6 q, V# d2 I g+ [% _1 y2 Q+ g. Z$ @
'petal length(cm)', 'petal width(cm)', 'class'
5 p( n0 C ?2 I- e$ K% c2 O ]); T/ _% O/ `3 Z3 f3 W5 [) F, E
with plt.xkcd():' ^( n( }) a3 O6 ?' l! ^
! d. L! a; f: r! q5 g
plt.figure(dpi=150) #设置图的分辨率2 i( q Q% M1 Z
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
2 }* Y0 n: e6 [6 a iris_type = pd_iris['class'].unique() #根据class列将点分为三类8 G7 e: c: ?4 h4 o6 K
iris_name = iris.target_names #获取每一类的名称
\; X; l. M" r$ ^& U h9 F3 [" @ colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色# Y9 C3 o" F' q2 I& J' Z7 w# p$ i
markers = ['$\clubsuit$', '.', '+'] #三种不同图形
* N1 e4 @4 y% c 6 l* [( s( N6 d+ [0 y6 p
for i in range(len(iris_type)):
" O7 J/ Q! X" ^7 Q+ @$ i" r plt.scatter(3 W2 e( y t: w
pd_iris.loc[pd_iris['class'] == iris_type,
7 Q* G$ R# N8 e& l5 p, } 'sepal length(cm)'], #传入数据x
7 [+ t; Y) L! ] pd_iris.loc[pd_iris['class'] == iris_type,, ^4 ]- B+ [5 E# l z
'sepal width(cm)'], #传入数据y
/ U V( ]( I% |- f3 \* S0 T s=50, #散点图形(marker)的大小
, W; R. f; f" j5 C* E: E9 n% f( t c=colors, #marker颜色
! z/ N3 b( N" S2 M0 Z/ I" Q: L marker=markers, #marker形状
1 B) Q- u$ ~( z/ J. p ~: O #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充6 t! T7 P" }' t% K+ R; V
alpha=0.8, #marker透明度,范围为0-1+ M4 t3 Q* w. I; ?/ A; O
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c; |. U- U; e* r5 Y
edgecolors='none', #marker的边缘线色
" ]$ P. T* _ K7 C linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用& U, Y% M* X7 X% ]! R$ s
label=iris_name) #后面图例的名称取自label. `2 K' ]% s% G/ X
5 _' ]' T3 G) x$ _& V# c plt.legend(loc='upper right')( [) z" i7 [: V" ?/ @
/ Z$ E# l; t1 A& f( J/ a
8 ^; G* c2 X$ d( F+ b1 M. h( O
————————————————
; p* C/ G# w8 d版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
3 |6 q* O2 R3 Z- K原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753: |+ D2 Q) n- V0 N, @( b J: c
- G: R( k! \0 W: W5 f9 S/ m& `- m( R( q/ N. t
|
zan
|