- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563419 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174249
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
$ B/ z, _8 C: ~3 w y
一行Python代码有多强,可让图形秒变「手绘风」
! q2 k; l' `7 I! R0 P! _之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
8 ~+ s X- w% S: E' V" ^ ^1 Q7 t% c& j' z7 p1 B3 ?
2 E. [% G/ V* b2 n+ F8 Z4 X8 [但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
* f) Q$ e' h2 m d2 y7 M7 f o
0 w4 d2 k% c8 N: B5 Y, X n* u- M( A0 l2 w) A6 O! O) t) k
matplotlib.pyplot.xkcd()简介, o% W$ T% m C8 q
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
3 g g" a. G5 E. L( U5 {0 D# L: C0 b% ?1 b, K* ^
% F: l) Q- c5 T* [) K' X7 A
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度3 C! |3 n3 |1 k# d: P, t D
length=100, #褶皱长度" s q( f) y# E2 @
randomness=2#褶皱的随机性: }% ?( g# G) Z. U3 l
)
% e. \& P+ J1 @! {" F5 umatplotlib.pyplot.xkcd()使用& D- ]1 s( g/ x/ j4 `/ Z8 |
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~8 l: u; y- j& B3 d
1 K/ ^6 c2 Q0 D7 r) n
! |8 j# M p/ m* _( R8 \& j1 Jwith plt.xkcd(scale=1, length=100, randomness=2):5 I1 p! q# n2 ?- U1 w( w0 ?, [
#with是临时使用一下,不影响其它图使用正常样式
, M$ b2 u) ~* \* ?/ W2 U3 K/ s" b6 } 绘图代码
5 g- h. B9 \5 V6 J7 ^" f( {3 Z 。。。。。。- `; m& c' D: t) B( v: Z
plt.show()$ G. U2 A2 @/ j" M1 c2 Z: i8 m$ J
matplotlib.pyplot.xkcd()使用实例 2 g$ _1 r! @5 H- k3 O) `7 Y
下面代码为pythonic生物人公众号之前的文章代码
q! }& k" ~% p |' V. z9 N. D8 E- q
6 r n$ @$ ]+ V# ]/ v- ~* U
以下参考:Python可视化25|seaborn绘制矩阵图# t' w- E1 N( G$ u5 x
' _& ?+ e% p8 Z* f8 b+ l a( @
& r, Z, l9 n. S1 a#支持seaborn
: y( C' G" }0 G. |import seaborn as sns; }! y4 ?7 A( Q+ \
iris_sns = sns.load_dataset("iris"): o. ?' i1 w2 y! o9 [
with plt.xkcd():3 Y0 @9 I6 B/ p0 q4 L% d
g = sns.pairplot(
: ?. z1 V; x0 w: y/ t7 E iris_sns,
! w$ l" B$ L6 U hue='species', #按照三种花分类
# A6 [8 b2 u3 B% r/ g$ e) L palette=['#dc2624', '#2b4750', '#45a0a2'])- c0 d v9 X9 r# g) z5 h( B* [: z
sns.set(style='whitegrid')
. [. O5 F% s# [% R; P g.fig.set_size_inches(12, 12)
9 [- I) s1 S* s: C+ K" E sns.set(style='whitegrid', font_scale=1.5)
2 ^2 S/ I5 A1 n7 e + p1 }0 L8 S3 f: x0 y4 N
! I6 S: L; V% L5 `) B5 f
: Y8 {; Y# a4 z9 q* n
以下参考:Python可视化29|matplotlib-饼图(pie) ; Z9 u0 `" R6 W1 _9 B0 T
# e* T9 v3 d, q
) s# {6 V& D& @% h$ }import matplotlib.pyplot as plt: q- ^* Y( a+ S
with plt.xkcd(9 e. {) ?2 a' Z( k" G
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
n3 J* X7 `3 W* G9 @ T length=120, #褶皱长度+ \$ |* A9 O' e4 J7 H. P1 N; D' _
randomness=2): #褶皱的随机性
8 }$ k( d5 P/ N5 T$ F# t plt.figure(dpi=150): ]' N) p5 g. v, o
patches, texts, autotexts = plt.pie(* T0 l; v8 `7 `5 f4 {
x=[1, 2, 3], #返回三个对象6 j1 M. k3 b2 v; |( O$ `8 g
labels=['A', 'B', 'C'],
9 P& w# a# @% x, K5 B) u& z4 N) u colors=['#dc2624', '#2b4750', '#45a0a2'],# q: g* W' e4 Q1 E) L
autopct='%.2f%%',( S7 R, k0 u& l5 \6 A
explode=(0.1, 0, 0))
9 N& ~ [3 A, ` texts[1].set_size('20') #修改B的大小
% A* w* i/ \5 Z; n1 y/ a" y( j
0 G. o; X5 W1 l: P #matplotlib.patches.Wedge
. L4 x# z+ }* P) [/ `% W patches[0].set_alpha(0.3) #A组分设置透明度( D* N; u# }0 x% z0 N8 k
patches[2].set_hatch('|') #C组分添加网格线
( _) P9 R' I# z. R6 g9 l( d7 ^ patches[1].set_hatch('x')
; k% F+ X3 M. c- E; @8 {9 k4 v3 ` % k* e" A" F2 S: T% v# @
plt.legend(
7 N* `+ x( k& z# h ` patches,
/ e9 ~( E" e7 o" ~0 Q0 c# @ ['A', 'B', 'C'], #添加图例! w' t) c' g Z- f1 C
title="Pie Learning",
& x$ h; H6 _; F H loc="center left",$ f) O' N0 l. Q* }, B6 |
fontsize=15,
, ?* s" l/ o* }' ~3 V, ] bbox_to_anchor=(1, 0, 0.5, 1))
& t" \# N$ e. h4 w% Y 5 l* W- L) K( r5 B1 b/ W4 d
plt.title('Lovely pie', size=20)
5 y1 E3 a. S- e8 S3 h P plt.show(). R3 k! \& z& R
, W4 d: F; p5 P; c, l
# |. v% e+ G& `0 w
& y" j% D4 `* E: H9 i+ t! @+ W, Z3 {! q4 o' k
with plt.xkcd():
# h- |3 b% v' C5 V- q from string import ascii_letters. g' O1 f3 u( q! z
plt.figure(dpi=150)
% ~. u3 x7 Q/ b! m2 {! ? patches, texts, autotexts = plt.pie(
) d0 a0 A& i5 k; B! ~) f x=range(1, 12),
5 g, U: z" G5 p labels=list(ascii_letters[26:])[0:11],8 v) P% H$ {! M, d" Z) H
colors=[
' V- I4 ~. J/ m( L( r0 T: j' e% s '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
: F) Q* [# O# }5 L. Q, c '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
8 C3 ~- T1 j% O! c ],
4 E9 G3 n( r7 c* i( T; E autopct='%.2f%%',
: i' B k! k& X- Q: b, J )
; @7 h7 j& Q0 E0 d* j5 D# c plt.legend(
/ y* C+ i. E- ?5 ]; |- _ patches,7 i, O. S$ W/ B. r/ ~; f
list(ascii_letters[26:])[0:11], #添加图例" \9 f; `! U: [- z9 ?6 t, e
title="Pie Learning", \2 b1 u1 U; Y& ^' I# K3 Y/ z) E
loc="center left",
! o# ?: k' ]* j bbox_to_anchor=(1, 0, 0.5, 1),
% n; Q/ i) S9 e' J- Q" ~8 M& H ncol=2, #控制图例中按照两列显示,默认为一列显示,
+ b& C& P6 Q# g1 k3 s )0 Z7 t- O3 i% ^( _
: q B' g# g" h! ]$ D a6 X' t
+ B; s9 T/ h6 D* Y% O
* h, B' a% T- W+ _
$ ^+ [0 V- b1 g; ?import matplotlib.pyplot as plt
5 Q7 N5 \" W# H% ?( w! i; ~& oimport numpy as np& v' \# D% `. }0 s0 Y" W0 `
with plt.xkcd():
, Z5 _; Z* j3 K# U plt.figure(dpi=150)& u* v! B& R9 ?3 Z: c
labels = ['Jack', 'Rose', 'Jimmy']' F4 u- |' G0 e, o$ m
year_2019 = np.arange(1, 4)
1 ^) g2 D& O8 K! x9 D8 G" Y* d year_2020 = np.arange(1, 4) + 1
$ f6 w# |3 n, Y. A; x7 ?3 b K bar_width = 0.4+ q* S2 U+ L; j: D
/ d! O. p9 e: a' ` `8 a R; I6 Q
plt.bar( e p' [, H( K
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
( ~( c" x2 B9 V, p$ O1 f# U year_2019,; ]$ R U, `$ S* o& e
color='#dc2624', c f6 D9 R2 @4 w# l
width=bar_width,
) J$ t; ?2 `: }( _4 d- Y$ G+ X label='year_2019' #图例
, m6 ]; l; E) ] O$ [5 g* j )
' h! P4 }. \- m1 r9 M' r& l3 L plt.bar(. A% e9 u' T v& e
np.arange(len(labels)) + bar_width / 2,5 k/ k! |, P* a* y! Y) ~. H
year_2020,
! L/ d$ j. P- m4 _5 T( u+ x# { color='#45a0a2',7 j' U1 |4 l* X: ^
width=bar_width,/ p. Z3 b0 Y/ p$ c+ z; ^- W) @
label='year_2020' #图例; h# {/ ]: O& Z1 b( M7 J
)
! F. H1 I* L7 ~9 R2 g/ O1 ` plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称
1 e' s- [8 X3 o: \! i# P plt.legend(loc=2) #图例在左边3 T# ~* @. {3 Q* F
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
3 S; A& z- D* C9 [" n
" F2 v0 W2 \7 t9 T8 D
( J3 |( ~+ z( {7 e, d; i; I+ ?% B2 |+ p; K' a/ `: B g
K- @0 q! b: q0 ^
s! ]5 j2 G$ Y$ }, z& k0 }* d
7 ^/ G9 f# b5 E以下参考: Python可视化|matplotlib10-绘制散点图scatter0 }+ H" I7 g. [+ W" i& M6 m" x
( y& z2 f9 }; w5 m7 t% r) Q4 i
9 J& B, l; _1 v2 P2 Wimport matplotlib.pyplot as plt
3 o! m. A6 `7 t3 q% Nimport numpy as np" @& @9 v0 o4 A9 J
import pandas as pd" z* M/ }, U) |& Y2 P# A4 n* j
from pandas import Series, DataFrame C, y4 g- d7 i0 L
#数据准备/ s: {% [; A& T& [6 L
from sklearn import datasets
- j6 e; w6 p6 S, F! m
0 m( I# Y2 I0 k- V. c) _iris = datasets.load_iris()
4 C) N+ n6 F9 [6 g$ V8 X1 ux, y = iris.data, iris.target
" o$ O" m/ O" Ppd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
@7 r2 H% o' z( e columns=[: \% Y0 Z' j- \! \9 y1 C0 Y O
'sepal length(cm)', 'sepal width(cm)',
& q- q1 h# R" [( ^- G1 b 'petal length(cm)', 'petal width(cm)', 'class'
! d4 {; U. ]; \/ }, g ])# B! k$ z4 L$ K' M1 q6 I
with plt.xkcd():
5 C5 P+ R9 _, P# u( G; c7 J
/ O/ V+ g. J) Y( J plt.figure(dpi=150) #设置图的分辨率
7 G J6 e/ n" k1 z #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
8 O+ |6 |% q0 C. t3 a# ?! s- t iris_type = pd_iris['class'].unique() #根据class列将点分为三类( y4 ~! j/ @( h4 `+ W
iris_name = iris.target_names #获取每一类的名称
D6 X$ ~1 E6 |1 J- H. q9 S colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色+ q8 G& r7 n# D8 o @8 |/ e! i1 G- b
markers = ['$\clubsuit$', '.', '+'] #三种不同图形" E" }2 A$ V. b
* P" b1 v" T6 @7 j for i in range(len(iris_type)):
! a; `- W6 J9 v) G9 X. O0 b3 C plt.scatter(
& g4 J1 \3 G7 J8 K pd_iris.loc[pd_iris['class'] == iris_type,
4 b! z% o' r+ N9 P7 R# I! H 'sepal length(cm)'], #传入数据x
/ ?) W1 o, C/ d& z% _ pd_iris.loc[pd_iris['class'] == iris_type,
# }# K4 x& E" d: I 'sepal width(cm)'], #传入数据y
3 s! m0 e1 }( h8 R8 s3 @0 s s=50, #散点图形(marker)的大小- J/ }- T" E7 W+ [( c7 S
c=colors, #marker颜色
2 A ]/ a% s, g9 { marker=markers, #marker形状$ ^& X* d4 H9 {. s Z9 Q
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
4 K1 A( k; O! z( |/ j6 s4 b alpha=0.8, #marker透明度,范围为0-1! ]1 \5 O2 s; H7 @- Y' w& g
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
6 F( S9 W/ K9 ? edgecolors='none', #marker的边缘线色2 T& F" P& {& O; O/ k# F
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用( k+ x' f* f8 D& p
label=iris_name) #后面图例的名称取自label
& L6 p t- Z' K" ~, K
1 X4 ^2 E+ m# e plt.legend(loc='upper right')
# K8 ^3 j! v0 L q, g5 t7 n4 E n; [2 \
4 G+ B8 }! ^5 L" |
————————————————& a' [* Q3 N9 F) j- D* ]8 ~ \3 J
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ r! e! t$ K- j- h) M. \6 ^
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
) M( I0 E9 V4 w& R3 `- s( O) j/ r z& m$ d0 r* h( x
, o" F" M! b y& C
|
zan
|