- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564568 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174593
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
5 Z9 g9 Y, J2 q. v- q
一行Python代码有多强,可让图形秒变「手绘风」4 w) a- @; X. ~ I
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具) o# r& A% w! S+ L' j, H
/ B& d1 d- M- A; S) O
1 h* \: x# L, ~9 M/ O但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。" j7 x- |6 H5 J" A
& u" J7 E& q1 Y) I4 G. d" H
2 `+ s2 [8 G* s% Nmatplotlib.pyplot.xkcd()简介, b+ e: `% t- ? `
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
2 t& M5 c' m1 ~! N! K6 M
3 C O5 v1 e: D6 g8 }4 J$ N, E- q$ | ~+ V! E8 `3 _
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度( W7 `; i3 P8 A5 ^6 w2 U: v
length=100, #褶皱长度
1 U7 o- n* p5 j6 i% m5 z, _9 n randomness=2#褶皱的随机性
0 Y0 D& s1 x9 ^; D4 P" V )0 j$ S! ]" p/ B3 K# }+ ?* ~
matplotlib.pyplot.xkcd()使用1 z6 P0 ]& X' h6 z6 L6 ` H
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
6 S& h3 c7 F7 z/ d' @8 _8 Z& s2 s5 M9 z* X; U, z
6 T* y9 u) k& J+ b
with plt.xkcd(scale=1, length=100, randomness=2):
1 u. D& W5 b* r% | v1 f$ C' p#with是临时使用一下,不影响其它图使用正常样式
7 v8 ]+ ^2 O, S6 i! x 绘图代码" s8 H) p3 ^/ e6 V6 |& l) [
。。。。。。0 }. I0 i; c0 Z5 o9 K2 c5 g
plt.show(): t3 n1 |" H }, H2 {; Y
matplotlib.pyplot.xkcd()使用实例 9 S y* X0 I2 D3 X3 ]8 b1 I
下面代码为pythonic生物人公众号之前的文章代码- G- N4 c5 x6 F1 X0 ]( D
4 |$ C* e4 \; e" j
& o- d& b- o& X& K0 T% P# Y$ [: G
以下参考:Python可视化25|seaborn绘制矩阵图7 p. b/ ]3 x$ A- e
# E6 N3 ~6 w' p" y# ]
2 V4 Z* t3 N q#支持seaborn
8 G! K, M4 ~; S0 G; u9 F! k. k7 f+ U. pimport seaborn as sns2 \! X0 b+ H0 \5 ~3 J+ G
iris_sns = sns.load_dataset("iris")- P! Q' A4 d& W" Y4 F1 y- c
with plt.xkcd():
" W+ b! e' r: D2 K g = sns.pairplot(
" p* t1 g+ H# C- I6 I# t; @ iris_sns,! ]" S' H! T" M( Y
hue='species', #按照三种花分类7 l/ }# E' z' m) h* z* H
palette=['#dc2624', '#2b4750', '#45a0a2'])
( F: k: c. A" Q. G+ ^ sns.set(style='whitegrid'): T% ?& F) }& x
g.fig.set_size_inches(12, 12)$ B* a7 l; E8 @* H, H& O
sns.set(style='whitegrid', font_scale=1.5)
) h6 B& ]$ ^4 h : C. Q/ H+ v3 H' Z
& S4 t# \2 i7 Z
3 ~2 v$ s# P: n6 G! x1 C# ]以下参考:Python可视化29|matplotlib-饼图(pie) 7 {! x! T: p4 j1 `1 A
. ^! W, ~( n+ l1 W% w+ m7 U
, [1 t3 M( P% T. }* O: F. l
import matplotlib.pyplot as plt
3 x Y# s; R) S, Bwith plt.xkcd(
" z& G* S" m8 v' k scale=4, #相对于不使用xkcd的风格图,褶皱的幅度4 T X! I, K: R2 i! F! `" |
length=120, #褶皱长度
2 N1 i$ D9 d: f# K3 ]! ~( |' d1 l randomness=2): #褶皱的随机性
+ T. |* ~7 m8 J' P+ J0 ` plt.figure(dpi=150)
0 d. z$ D7 z. {6 u3 P patches, texts, autotexts = plt.pie(' ]& q: S' s- A R
x=[1, 2, 3], #返回三个对象
% ?( W N6 `; N2 }$ f1 E labels=['A', 'B', 'C'],
) V; f0 r; l; a& v6 N colors=['#dc2624', '#2b4750', '#45a0a2'],
: X0 t R" A* r& L |4 @ autopct='%.2f%%',
# J: Z! w% t. b2 ^7 m9 u6 j explode=(0.1, 0, 0))$ N$ s- w! e% E& Q; j* k4 l' P
texts[1].set_size('20') #修改B的大小
1 t' N5 I3 V0 G2 a6 H0 b- C
9 l2 R" @( e# s! m; P #matplotlib.patches.Wedge: F1 r) C# ^- r) k
patches[0].set_alpha(0.3) #A组分设置透明度
0 Q* O% }- O/ _! g9 L6 L patches[2].set_hatch('|') #C组分添加网格线0 s, p3 ]$ k3 I, x( b* P
patches[1].set_hatch('x')- G0 H( d) |. z
7 o& p* m; E1 k, s6 v- Y: U* n& z
plt.legend(0 B. b- b+ H/ m9 L
patches,
5 m+ T" h) f; X* Z ['A', 'B', 'C'], #添加图例
" |6 V4 C1 C& u# @ title="Pie Learning",
" ^. n3 r% V9 y7 V loc="center left",& i7 ?% r4 Z* x
fontsize=15,) V$ G8 R0 b6 W" l0 e
bbox_to_anchor=(1, 0, 0.5, 1))0 R ~+ ~1 b2 }/ s5 X2 T: z0 y' u. F
# {" A$ C) o. o. J! w/ t6 E* c plt.title('Lovely pie', size=20)3 L! z/ m0 O9 Q8 m e4 ^9 _8 F' u
plt.show(); F: Q( Z _: o% W8 E; b6 q
3 ^# _ @/ C5 i( o( i) k# M3 w; A% K; W6 e7 J
0 N" z8 |. J8 I5 \1 x
4 ~% F4 \7 g9 S) e! U- N# ?7 G# b0 ?/ N
with plt.xkcd():
, I" Q" X; o$ \ from string import ascii_letters
- U; u$ Y. V/ ~% G% Z" t plt.figure(dpi=150)
5 r" a. q" ?/ U, M; s4 i5 \ patches, texts, autotexts = plt.pie(+ x; ~0 `4 N3 I7 Z8 J1 K- ]
x=range(1, 12)," }$ D& Y' d! E1 e0 Y
labels=list(ascii_letters[26:])[0:11],
- @# X3 P+ z4 t/ `1 ?$ f/ X colors=[1 ] @5 \# H) L/ K' E/ {/ F( Z
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
n/ M/ Q& t$ P) ` '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
, N, {* X% m9 Y- Y* P H' ]% I& a ],- M$ h+ D' L2 l
autopct='%.2f%%',% `& K- [, U& `4 ~, o6 F+ o
)
( v& n/ V& C0 I) q+ r plt.legend(
3 t/ B9 x2 ^& g9 V/ S patches,
0 \9 j* q: J! D' p list(ascii_letters[26:])[0:11], #添加图例: A0 B/ O, Y4 H/ b1 o/ Y
title="Pie Learning",; [# D4 B$ R0 J' ]0 v
loc="center left",5 s. P6 C- g* M) X" |3 l4 o9 Z
bbox_to_anchor=(1, 0, 0.5, 1),. M" L- ]" M5 `. M% }) P
ncol=2, #控制图例中按照两列显示,默认为一列显示, K r! F3 J9 @ x* V4 [. Z
)
0 K" d1 Q3 `4 q& M3 @% Z% d8 `4 B0 W0 s2 @" e! k' T
0 H/ t* N+ K5 _3 J0 I
: S r$ z. }* B8 v! j4 G J0 d& y- u3 @' }
import matplotlib.pyplot as plt
e: V3 o8 I4 P4 l1 jimport numpy as np
! S' W5 p, ?1 V, P, [2 M) Y% ^with plt.xkcd():
5 }0 P# U* c! B, v' h" ~% N9 l1 p; d plt.figure(dpi=150)
% }" j+ S& v' G% G7 W labels = ['Jack', 'Rose', 'Jimmy']
9 L1 r7 `" S+ c8 M. j% h! [ year_2019 = np.arange(1, 4)* R2 A* q& g: D! _3 p/ B! x
year_2020 = np.arange(1, 4) + 1
1 _ {5 } |. Q H bar_width = 0.4
0 s# Q- ^4 r3 {- U
* x. q2 ?3 T9 K3 ]. R# @ plt.bar(
6 h) o/ A" O: M np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
2 I. R- v. e9 y, L8 `5 W year_2019,9 y2 z# Z6 W+ {4 b/ h. v
color='#dc2624',
^1 B: [3 p* y9 G3 X$ _) P width=bar_width,5 i- u& i/ w: H d9 W, b
label='year_2019' #图例& \& Y3 K" }% x
)
& n6 g Z$ ?2 w, T) u( i plt.bar(' r7 \; C0 D2 D5 U3 X6 b2 i
np.arange(len(labels)) + bar_width / 2,
* l; x4 i5 p% X9 f' _ year_2020,; L: r2 ], C3 e; r- r
color='#45a0a2',! ~+ T6 Y# R/ g
width=bar_width,
* r( ^0 ]+ `& I" S$ I2 f5 j2 n label='year_2020' #图例
( o' Y9 A% O" y3 q! Z# K$ X )
# x, n) S' z" W( e plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称% l8 P8 D" i/ G) l3 x! J) Z
plt.legend(loc=2) #图例在左边& w$ J+ w: w$ @3 Q a, @5 p$ @/ s
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
, w0 \* X8 \) Q- [) o& o$ b0 s$ a/ C& c! w. O) O, n8 [1 y% I
7 M- b: r: }, o: m$ O) ~7 s3 D, b6 U( q+ e
7 v$ ]- Z$ H9 D% r3 N" w) h: L8 W, k9 | ~- }7 G
# g% i( E0 n2 F- h7 Q" K
以下参考: Python可视化|matplotlib10-绘制散点图scatter# ?1 a+ W) l- b7 H ?. k
+ y; q3 q8 @" U {4 g9 K b# B! n
4 n3 g9 N( c; u; c
import matplotlib.pyplot as plt
6 t/ H z8 _9 v0 n% W9 I; W: I6 B( cimport numpy as np q6 [4 |* V9 q5 ^3 M; u9 q% ]
import pandas as pd
# T7 T" n: A0 {! i Yfrom pandas import Series, DataFrame
, m$ q/ ^- n1 \1 ^4 Q, Q, d4 j#数据准备, g {9 p6 N5 \3 k; B9 l
from sklearn import datasets
6 I7 h' w8 |; }3 Z & @) Q5 u: q: y* H! I: E ~
iris = datasets.load_iris()& V$ t: b3 K& ~, L
x, y = iris.data, iris.target: `8 i, L" B8 z$ g( {7 B! W
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1)))," e' |4 F) \. l; ?/ ], n2 \
columns=[! f4 F3 r& b# I) f6 E7 o
'sepal length(cm)', 'sepal width(cm)',
- c1 [9 b6 F) Y4 A 'petal length(cm)', 'petal width(cm)', 'class'4 g% l$ c5 |0 I
])7 ^8 t+ |8 D. a: y2 c
with plt.xkcd():
: T( r2 w7 _# P) s0 ~# B) j' v
* X: g/ N0 O7 T2 ?7 K' n% K plt.figure(dpi=150) #设置图的分辨率/ S9 C) ?& W4 `' r; P4 z5 P. U9 e
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图- N( `. m, z' R
iris_type = pd_iris['class'].unique() #根据class列将点分为三类! n& f: U+ |4 z; r6 Z
iris_name = iris.target_names #获取每一类的名称+ D. g+ J8 T5 B% T
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色% u# |- v( V" e d: s
markers = ['$\clubsuit$', '.', '+'] #三种不同图形
, m9 l% f- ?5 k; b8 d0 q6 g- B& t ; x1 w( i3 L! p1 q# L
for i in range(len(iris_type)):
[% y- G) u3 R5 Z2 o- O( _ plt.scatter(+ l- G/ T6 V; p# z8 h P/ _0 F
pd_iris.loc[pd_iris['class'] == iris_type,; g; n6 G. Q5 l% A$ L
'sepal length(cm)'], #传入数据x$ o6 D! m% _: H% I1 S
pd_iris.loc[pd_iris['class'] == iris_type,
: P) b4 ~8 k! x' `: S' N2 P: W 'sepal width(cm)'], #传入数据y
- h# G0 D' K. M. u s=50, #散点图形(marker)的大小
3 C% ~3 g# w: H k' q. K" B3 b c=colors, #marker颜色
. s' f! R( p: V! z- Z+ V: b* p marker=markers, #marker形状
. v- ]. [2 h# V) O( }! L( t #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
1 z# U/ e: j& C: \ alpha=0.8, #marker透明度,范围为0-1' N/ H) b; \$ e* x5 f' |
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
4 x! y" ~' I" m: S5 S5 v edgecolors='none', #marker的边缘线色' W) t% h+ t1 X. n1 W; A
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用9 A& s. d. X7 h5 H* J8 N5 k% ]
label=iris_name) #后面图例的名称取自label
8 h, w/ e, w) d5 ~5 j 8 ], R* [6 T% ~' p- X- x% q6 {5 B
plt.legend(loc='upper right')
* a1 x' f$ p% x. @* Z
+ ~8 ~1 l+ |: ?# c$ V
3 `3 }, o B% I2 W z————————————————& u! b* A/ _1 j7 F
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
) V2 m1 i5 l; N8 C. Q% T7 N原文链接:https://blog.csdn.net/qq_21478261/article/details/1189637536 E* |' M$ g5 ] U2 f9 K' N' d- ]
+ E0 s5 o' O# K( Y& C3 e
1 A* Z& J( ^$ ]. ~2 F |
zan
|