- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564562 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174591
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
' \; Y! g$ K$ Q F
一行Python代码有多强,可让图形秒变「手绘风」5 y) Q7 b F9 a
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具* r+ @; x+ P) x$ W
. @- N7 D* Y9 _2 o" C. A, o
; K$ v" D6 k* J) b8 h% ?0 R. o4 {: R- f但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
7 a, l' r# N0 r7 ]
/ ~; n6 o: ~* r( T& E
2 X3 S7 p q- n& F2 mmatplotlib.pyplot.xkcd()简介
- I- V4 X, W2 g, S. J这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
# t/ ^9 R: ?* I) A, A/ G: Q1 s; y6 H
0 e6 x; j5 M# F) r- Z
$ C4 \* @: ]5 Jmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度3 Z+ \1 y6 u4 b3 K8 O- b+ T$ A; y
length=100, #褶皱长度$ a4 h: @& k5 x5 d @% p
randomness=2#褶皱的随机性* L: O% W( z+ `7 P; h: G5 w# q
): d+ B/ z( b: e* p/ }* q
matplotlib.pyplot.xkcd()使用; j9 T& T& ]5 [* x8 |5 V9 R
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~! a3 W" A& Z0 S# H0 v
, v! G) z- B' Y( M; W2 [
7 `! j9 o/ T3 e0 H& vwith plt.xkcd(scale=1, length=100, randomness=2):
3 Z' n* R( t; X2 r#with是临时使用一下,不影响其它图使用正常样式
2 l( B( S0 S" |* u' e: O! A% w 绘图代码
7 T1 _* Z" b- x# }4 e 。。。。。。
: l& \6 J6 y0 G9 M plt.show()
% F2 _6 h. F! Y# bmatplotlib.pyplot.xkcd()使用实例 9 P8 t. H* _* C8 V/ l& M
下面代码为pythonic生物人公众号之前的文章代码
) m+ U. g1 ?7 `
. ~4 t1 R: n+ Q' ]# b# D# H$ {
- v% L+ q) A/ I+ p, [以下参考:Python可视化25|seaborn绘制矩阵图
Z+ I5 J# D1 o5 [, W9 Z4 R2 b& ]3 u0 n, f
' w4 d9 J' b$ c8 x+ R/ F5 P
#支持seaborn" W3 h8 Q$ _$ {
import seaborn as sns5 H, U. L u( l0 l' n, E
iris_sns = sns.load_dataset("iris")4 d3 v+ g- E# O6 d' S6 R
with plt.xkcd():- l. h) w+ ^/ T. F
g = sns.pairplot(& Z. k1 l! h; u' q B2 M6 z
iris_sns,
5 L2 O1 o, _5 q5 x hue='species', #按照三种花分类
# k/ V* @# y0 S8 T# ^+ i palette=['#dc2624', '#2b4750', '#45a0a2'])) F* b! P9 `: Z# l
sns.set(style='whitegrid')0 v+ S$ Y" K5 {4 ~4 z J5 o
g.fig.set_size_inches(12, 12)
1 J' j) t( r% |: @1 A sns.set(style='whitegrid', font_scale=1.5)
* W" m* ]6 ?7 R) g+ ]+ Z" D) _
3 ?* s+ @' Y! U$ f4 c3 @; e; K
R P( p2 v6 x0 u$ S8 U) G/ O1 B {/ F
以下参考:Python可视化29|matplotlib-饼图(pie)
* G! Y6 }+ I, g! P+ `4 ]: U7 k* ?) U+ @+ i/ q4 T$ w
' \2 [" \% g0 N: Limport matplotlib.pyplot as plt
& j8 `, u7 l2 N# G' Ywith plt.xkcd(1 w; F2 n" n4 |, E6 n
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度6 L, `* J0 N2 \& j6 m% o7 [# N
length=120, #褶皱长度
* S7 Q% D9 x. Y+ C e randomness=2): #褶皱的随机性+ Y6 Z5 c( }, {, i
plt.figure(dpi=150)
) @! M" X% o1 u7 S6 F& H patches, texts, autotexts = plt.pie(: s& Z3 _- d/ M8 k
x=[1, 2, 3], #返回三个对象# u+ o: z( s/ v+ \7 E* ~$ V
labels=['A', 'B', 'C'],
7 h, i7 Q3 C: l7 T# E9 P; a# t colors=['#dc2624', '#2b4750', '#45a0a2'],9 ]+ a: b, e, v; y' V C
autopct='%.2f%%',$ @$ t. q$ c, K4 W, I
explode=(0.1, 0, 0))
% v# i7 _/ Q! ?# [ texts[1].set_size('20') #修改B的大小( |/ R, T* E6 \ s4 e
+ F2 p5 v; r0 p( `/ V
#matplotlib.patches.Wedge( m6 X2 R: b8 n ?' z& p
patches[0].set_alpha(0.3) #A组分设置透明度
# S1 Y& ]% E7 ^- E( r patches[2].set_hatch('|') #C组分添加网格线
2 `6 i; P: u L/ { patches[1].set_hatch('x')
6 h' U0 W" s0 J* [ g N( B; R% r2 a. I; K$ w
plt.legend(
8 A; P/ w8 f2 P: L2 i; g4 Y patches,
; I* S9 i6 E3 U# }4 f ['A', 'B', 'C'], #添加图例) h) o% b; ^4 Y [: Q
title="Pie Learning",9 D3 D* J+ m+ y4 @2 U9 w
loc="center left",$ j6 |+ C$ o$ q4 N
fontsize=15,( k9 X4 ^0 ?3 J# W. R' ^
bbox_to_anchor=(1, 0, 0.5, 1))" O5 {: V) L. |
. z. W) B9 ~8 s! L( A# R% z1 o plt.title('Lovely pie', size=20)
9 i# c0 A* _) T& s! S! h7 U( c plt.show()
* u$ Z' k, m5 Z6 v9 L
7 r: l- k, |8 H' N( d' o9 A8 w0 v6 [! M( B
6 {! F" ^8 l" Y
7 A" r% l. t( D9 ~8 I# [/ [with plt.xkcd():: o# B6 \3 P/ Q- l" c
from string import ascii_letters
/ K7 y. a1 p" ^* I/ m8 R+ Z( \ plt.figure(dpi=150). ^0 ?* j( B' Q; ^5 A" c, a: B
patches, texts, autotexts = plt.pie(+ c3 w( d. u+ C7 S2 z: b0 B) b
x=range(1, 12),. e6 s8 y+ ^; z9 V8 i' t1 i7 O$ }
labels=list(ascii_letters[26:])[0:11],5 D6 F3 O. B9 n3 B1 x2 U& R3 y
colors=[
d& M. }, H( y0 R3 y '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',5 l6 Z* B/ w* e0 o* u. L
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
5 |0 M8 y' J$ h* `$ C) R8 n ], J9 ^# U, [( L z$ N
autopct='%.2f%%',& v& v- e# e9 r, m$ e9 G2 a. c0 _
)
* l% S& x/ I, z- N/ L+ i plt.legend(
# V. A, A9 ]7 f patches,
1 {; [& [" t" i6 C list(ascii_letters[26:])[0:11], #添加图例8 w# H4 { e8 I4 G" ^7 f7 |
title="Pie Learning",
2 h6 I7 E. _) a( u loc="center left",1 S6 q. c1 ^* R c/ }- p5 C
bbox_to_anchor=(1, 0, 0.5, 1),6 H/ [: l1 E! V, B$ f
ncol=2, #控制图例中按照两列显示,默认为一列显示,0 [3 T) }" M" [" N- W5 s L- y
). U% X$ d6 I* ^8 h9 ]2 w( N# X+ Z
+ g% ]3 j* U6 D5 a
6 J7 H+ S; B( v% Z
% N y: s$ \+ H5 `( ?8 B
0 C6 t7 u- y/ Q2 r" e3 aimport matplotlib.pyplot as plt
- i& h- o; }5 Pimport numpy as np. @3 i, L! T9 F+ F) N+ V
with plt.xkcd():
5 B( R4 g' ]& k2 `. f plt.figure(dpi=150)2 k6 L$ g9 ]6 ^6 W# S; M" F% h
labels = ['Jack', 'Rose', 'Jimmy']2 Y) F r( v- n* D' U' R
year_2019 = np.arange(1, 4)
6 W, }0 _3 Z2 D# c7 K; Q year_2020 = np.arange(1, 4) + 1
$ @9 n, l2 N4 R! E, q bar_width = 0.4
$ a+ Y3 t1 L3 R2 [7 z3 g6 J! ~$ t
8 ^- V* Q" U( H. o& b# S+ C* p plt.bar(
# U8 A' X# F5 ^" D n3 [ np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽: ~8 p* R K. g3 d" O
year_2019,( {& ~# E1 P3 ^" W/ {
color='#dc2624',
4 Z% H5 t& p6 J0 v width=bar_width,7 a9 R0 k# r: c" m, R, S
label='year_2019' #图例% @$ q/ X: D: }3 Z2 q- W
). Q6 ~5 x$ Q+ D) H, b
plt.bar(- a w0 R7 u3 O( k* ]7 x) ?% z( Y
np.arange(len(labels)) + bar_width / 2,
{% Y4 g/ N% p" a) y: x1 y5 j year_2020,
6 r7 R# w! v6 @0 f color='#45a0a2',
2 L- }+ e* ]9 e# Q width=bar_width,
4 ~" M( ^) H4 K, [( J$ d# b label='year_2020' #图例
) y _' P: ^9 X/ J$ _/ l" A )
! i& L9 \+ \- T# u5 ^: B( C9 k6 A* B plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称( h5 \3 z; n/ d& j1 f
plt.legend(loc=2) #图例在左边; o5 d6 {1 R+ N% t2 P9 @
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
; {) Q& I$ e$ O' z, H! G8 m1 k" c0 x
8 q4 x1 E6 x* a2 U. ^3 \' S+ v% `8 e& h( v& a* d8 W! D
6 A0 ~7 U/ x6 D' _; n
6 _# d1 ^8 R( N- b
& S! V) }# i! x, q" F E; ?
以下参考: Python可视化|matplotlib10-绘制散点图scatter
0 z2 L- V; p1 ~/ h5 i. c! e/ X8 L
) [* s( j2 a2 a2 }# H$ q& t# l' J* T( S$ m8 u6 g4 U
import matplotlib.pyplot as plt
$ s2 Z" L- J" h! \& Y1 l4 l/ T: {import numpy as np6 ~. G" \- \9 l5 T
import pandas as pd
7 t/ d- c# d5 f. i: x7 ^from pandas import Series, DataFrame
; p; @- G! {$ K. B, ^; X" }8 m#数据准备& M2 M, p* Q- @* L, F( q
from sklearn import datasets
% d7 R6 r8 {2 I# V! l# _
; H7 G* n3 I2 ]0 C; w; A2 X- g" Kiris = datasets.load_iris()
3 z# t$ m! [; G* ]x, y = iris.data, iris.target
1 y# \( `' L7 B h9 {pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
3 `: j6 j# m1 B& \6 D+ Q columns=[& |0 _: r% c k( E- U; z
'sepal length(cm)', 'sepal width(cm)',; v9 m; q0 v4 D w
'petal length(cm)', 'petal width(cm)', 'class'
' O s y( r; ` ])% A8 I" o8 ^, a1 q1 q7 `/ @" [7 ^# ]
with plt.xkcd():
" H8 [. Y7 F8 [ d9 } # _) Q0 x) H6 z4 R* b0 h
plt.figure(dpi=150) #设置图的分辨率& \# S' B' m) X: l. @+ B( I3 T) f
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图: B5 ?! ^7 y& z. B
iris_type = pd_iris['class'].unique() #根据class列将点分为三类
6 R$ v: L+ d; b8 @ iris_name = iris.target_names #获取每一类的名称
1 \( [# M% ~3 g( L colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色/ x- k9 D9 \& Y
markers = ['$\clubsuit$', '.', '+'] #三种不同图形7 k, }" R# I( d
$ z; V" B+ j- s
for i in range(len(iris_type)):/ e# G, ]3 F6 z- |% Z# w% g3 q
plt.scatter(6 N! E* ~- i9 _4 _
pd_iris.loc[pd_iris['class'] == iris_type,
& j% U& a, B$ E5 g 'sepal length(cm)'], #传入数据x
/ \" q; \+ P) S2 ? pd_iris.loc[pd_iris['class'] == iris_type," K4 M3 ~4 _3 Z5 @/ @, B; _/ t
'sepal width(cm)'], #传入数据y
6 s* c: `2 K- ?) Y( h% v" N5 l9 \ s=50, #散点图形(marker)的大小
; L+ z" Z4 B* W c=colors, #marker颜色
! `3 r# V0 e& T5 W g' g7 V" ]! v marker=markers, #marker形状
# C6 D+ ]2 Z) [( |, j #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
2 N& Y8 O9 j C! g8 }8 N$ W6 ^ alpha=0.8, #marker透明度,范围为0-1' g0 T! ~; O1 ^; R h+ n
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c: [; S, {; h( h; z; {
edgecolors='none', #marker的边缘线色
( Z" z2 Z+ [% ? c5 F linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
$ `, a( O) R4 i label=iris_name) #后面图例的名称取自label
7 d* Y+ N, `; c+ l: ^# ?# |* b# c0 ]
, {) ~' U# I) W2 c1 j( H- s plt.legend(loc='upper right')) c- }* L$ |$ k) c. g& f1 ~- }2 o
Q b6 S: m4 H- t4 O6 f
( r7 R' f' L) P
————————————————0 P, A8 y5 D% I
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# b; Z$ `" I5 V
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753. Z2 y) Q/ i9 p3 A2 G! v
0 F9 V/ @5 p1 ~9 P7 U) p7 U
: m, T5 ^0 ^5 R9 v& S$ J |
zan
|