- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566435 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175153
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
9 \- L( r+ U5 R
一行Python代码有多强,可让图形秒变「手绘风」7 A; L% e& i0 \, y8 D
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
, K9 {# n3 r' a( l! p. s$ y$ n# W8 V. N t- |0 |4 \
8 F& R7 i- T- b* v5 K5 A* k& C8 I
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
+ ] L) q1 f2 [3 i3 [
" a& a5 G) K% x6 W3 h/ Z# |; [: D+ W6 S( |2 G: [7 G O
matplotlib.pyplot.xkcd()简介& V( |; U( J5 r% R ^& T
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
& x4 x+ a3 ?! j. a# b; P5 W! a
+ C* \0 }0 d- J( ~) F1 R: Rmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度) ?( }' C* M* a* v
length=100, #褶皱长度! {6 [& c# a" v; {
randomness=2#褶皱的随机性
8 V( o! w$ x9 E/ c7 m7 _+ |3 W$ T )
$ [; [2 c0 G& z, v: T* @3 Fmatplotlib.pyplot.xkcd()使用5 g8 ~2 o, P; x% R
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
+ ^/ H [3 J0 M. R4 E% r1 }3 i! ?0 m- m. D T/ ?
: O8 m: M. N9 X0 o- k1 Jwith plt.xkcd(scale=1, length=100, randomness=2):5 Z/ s7 N* o4 d9 E9 j
#with是临时使用一下,不影响其它图使用正常样式) p- S9 H6 @( i0 x
绘图代码
6 v Z: E5 X$ E$ F! h! p 。。。。。。+ X, z* B* e u4 f9 U
plt.show()6 Q8 G0 U' A; X: n( E. T
matplotlib.pyplot.xkcd()使用实例 " l! h' |9 s3 g" N+ f5 |+ l& r
下面代码为pythonic生物人公众号之前的文章代码6 n) w9 W& W0 l& c
+ _( b2 d8 o. y% |3 l/ m6 X9 @
6 A, h- v8 l" z$ c4 z* D+ Q
以下参考:Python可视化25|seaborn绘制矩阵图
7 i, \3 H& E, c7 L) a, d( L6 B) |& ~; M9 a& A" c! X
, W+ {: \! i' U. C3 Q#支持seaborn
& A v6 i# p" }) P% t* Himport seaborn as sns
% P5 W. T- s% M" \! Eiris_sns = sns.load_dataset("iris")0 \. X1 a5 d# Y
with plt.xkcd():; ]$ A1 A9 e l4 K) u( x
g = sns.pairplot(
3 [1 x1 D0 b- s6 Z5 k' N5 n( S iris_sns,3 u9 |2 E0 A/ m/ D+ j
hue='species', #按照三种花分类
- w. v7 K$ i* | palette=['#dc2624', '#2b4750', '#45a0a2'])! M# `# S% N& D+ Q9 v4 o
sns.set(style='whitegrid')
7 C( O0 j. q# x! f g.fig.set_size_inches(12, 12)* K# Q: W* k6 A8 L4 `4 Q
sns.set(style='whitegrid', font_scale=1.5)* ~$ U- }2 F1 a2 r1 f
& D( W; A" q9 n) M: W
$ e2 j. i# b7 V/ f! G& ?# V
/ [) V' e! j, r! I6 o0 P( p以下参考:Python可视化29|matplotlib-饼图(pie) ; p2 G1 F% {4 H
. z* k. V* f, D4 S* l+ K9 ^* U! b6 ~0 ^, m m4 a, L; V7 I- ^
import matplotlib.pyplot as plt
1 t+ E5 n# y, v6 D) i9 hwith plt.xkcd(
$ u- H. t( q, Z5 V scale=4, #相对于不使用xkcd的风格图,褶皱的幅度2 ?) ^( i9 l7 j% C
length=120, #褶皱长度( Y7 a0 f! o: ^& w# L9 ~$ R
randomness=2): #褶皱的随机性
8 F+ Z- w% G6 s1 w0 L plt.figure(dpi=150)
3 f8 y4 a# [+ S& Z3 S, v patches, texts, autotexts = plt.pie(1 |& P" f5 C; W# Q
x=[1, 2, 3], #返回三个对象
) k# y D" v' V1 @" H. p labels=['A', 'B', 'C'],
5 o' M: {* v; C. t- t# e colors=['#dc2624', '#2b4750', '#45a0a2'],3 B" Z3 z* I3 h- v
autopct='%.2f%%',- v+ |3 d6 y# D
explode=(0.1, 0, 0))
2 r( A0 K X3 V texts[1].set_size('20') #修改B的大小
2 B" y5 S7 A S9 L
" f+ Y$ _( I" z* j; v #matplotlib.patches.Wedge
1 z9 w t; I i5 p3 z4 E% m patches[0].set_alpha(0.3) #A组分设置透明度. Y; Y" R7 a* a3 b! [3 [; M
patches[2].set_hatch('|') #C组分添加网格线3 Z3 ~! V0 @. O4 R5 G) A- C) R( [
patches[1].set_hatch('x')
6 U Y* G- i; T' \( J. \1 Y# I
5 H* h6 E0 _3 m' o+ i! E8 s9 m6 q plt.legend(
]& O4 B9 `- J2 g patches,
$ ]0 W+ J3 g' C) N9 @( D+ K# C6 l ['A', 'B', 'C'], #添加图例
6 {' R& e I/ Q* @- v9 P title="Pie Learning",& r1 t8 C0 V7 c. W' J
loc="center left",
8 X$ I2 ]. a' W$ ~- b+ s( n fontsize=15,
5 j. ^* M, q* z$ x6 Y bbox_to_anchor=(1, 0, 0.5, 1))
, I# t. G2 W1 ], o3 T3 m
6 x) n& q8 W4 N5 ?8 j plt.title('Lovely pie', size=20)9 q5 u& k/ S x }! Z' ^" i
plt.show()
! m: s- {' r( B
7 p) ^! r4 d' e9 |- {
a" h9 D5 o3 a& G/ u
# U6 A0 ^6 D% s' F4 A4 v! J8 Y) F- B" H+ J6 g" h
with plt.xkcd():+ ~, ]+ C0 \: ~; V' h8 @8 | w
from string import ascii_letters
( C! `/ V5 e& H5 [4 l7 Q plt.figure(dpi=150)
% B7 U" t2 X% m8 L# X( P patches, texts, autotexts = plt.pie(
& d. a3 P. W3 r2 l1 }% \2 B x=range(1, 12),4 P H V0 _9 L6 r6 V( f
labels=list(ascii_letters[26:])[0:11],
$ Q# C. _) F) \1 Y4 ]4 V: i; W colors=[
+ M5 n( q6 Z! `" f5 }6 X' b) }% N6 k '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
& B' v- h$ i) i1 g7 l; _ x '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
$ G* \3 m& ]1 e; l ],# `- e3 o& p- L+ @- u
autopct='%.2f%%',* H* w9 p( ]- ?, }
)1 ?+ h4 T, ?2 t( f. M: X
plt.legend(
2 U9 m" \# |+ a( ?1 S n |- I patches,
& x: `9 o Y9 L0 S2 \4 F/ ` list(ascii_letters[26:])[0:11], #添加图例8 L" y( [* P. M
title="Pie Learning",1 W% ^7 Z' i/ {* ~* w; ?$ Q
loc="center left",; x6 {6 b; L9 J1 {$ @8 l0 }2 u' p1 P
bbox_to_anchor=(1, 0, 0.5, 1),+ z; O/ f7 f1 G7 t+ h1 f
ncol=2, #控制图例中按照两列显示,默认为一列显示,
1 k0 J4 R! y8 Z, [: \ )% w3 k& U! T& S0 Z' p; F
4 H/ O3 i) \6 @( }6 a7 h; H
1 |. x" ?( U/ J7 q! l3 N! m( z, }
( u5 [7 [+ L( a0 B7 P1 c# |. {' f( d1 x5 I& t! R
import matplotlib.pyplot as plt6 R( k/ C$ h; L
import numpy as np
5 R. M2 r8 c C9 N. @with plt.xkcd():8 Y7 J& {: t+ K! g* a& L9 @
plt.figure(dpi=150)
9 q) D! w# M- M( {, t/ o labels = ['Jack', 'Rose', 'Jimmy']& u' \ i W$ [7 y6 q
year_2019 = np.arange(1, 4)6 G- G5 G: C( }
year_2020 = np.arange(1, 4) + 1
; z& l- v6 l1 m( U0 V bar_width = 0.4
% q, K" P7 `' @' P/ g/ ]" K5 H
) n1 ?/ j3 C% ?, {5 U plt.bar(
5 l+ _) Z9 p, D* Q" ~. A# I) O, M np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽! w8 Q! A- [) o M1 b% S
year_2019,1 X6 z+ @: x# b% ^( g+ c* {
color='#dc2624',
8 p7 C0 v& n5 j0 j7 @ width=bar_width,
+ x& d' f' `8 X: K; y$ \/ V label='year_2019' #图例 X; {! P3 B$ k1 D3 M$ M
)' _8 t" ~9 {- C& ]
plt.bar(; s z) X( C( k# j+ g' M( ]2 c3 I
np.arange(len(labels)) + bar_width / 2,
0 M0 f1 B$ W7 H' l! u$ f year_2020,
2 c6 s {( Q5 e: Q color='#45a0a2',
, O# s5 x. W. P( m width=bar_width,
9 R9 r; ]; ]* q% c8 Q label='year_2020' #图例* Z4 L' i: ?, Q; }
)
! R5 D7 K5 |5 f N plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称( k2 W- g7 T _! n! P* k. ], t6 n
plt.legend(loc=2) #图例在左边6 O* E! c( }2 ?9 X
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 8 C! z U" [' G a$ i
. k' A Z+ A+ {4 q0 t- I2 ~4 M
0 V0 N5 S5 V1 E3 `7 v
- O* ~& U" _4 C* Y+ U
U0 F- D8 F( f
- x4 O" C8 m7 J
& d% E8 ~7 H$ O' T( [) h以下参考: Python可视化|matplotlib10-绘制散点图scatter
0 h+ L' E5 _2 I2 |! q# M, M9 V; \7 W* s" g6 _
7 E$ [, V4 E! I9 C+ D2 ~' `
import matplotlib.pyplot as plt
& V1 h1 M9 G) s: K. Himport numpy as np, o' V8 n p' y. F
import pandas as pd
& N( x W' {. q8 h+ @from pandas import Series, DataFrame
# ]) Y0 j8 T) X2 e, L; S& c+ K* V#数据准备
& X% m. f" V6 \from sklearn import datasets- B9 t# \5 ^% i R7 b" ]
B- a7 @3 A! `, u# R! X1 Xiris = datasets.load_iris()
$ f3 b8 g. f) u( tx, y = iris.data, iris.target
. o% |- w3 j" x& Bpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
5 Q6 e/ D9 q* J0 }$ V# z% e columns=[9 v7 r" ]2 G) v2 |8 l
'sepal length(cm)', 'sepal width(cm)',
7 V, [5 A% N- R2 f0 _" D1 N 'petal length(cm)', 'petal width(cm)', 'class'
) |- }9 m4 l G8 I' c4 E ])0 H; L9 j, v9 F3 _0 U2 h
with plt.xkcd():
9 r, y% s% b" A1 P& F/ p5 E1 ?
Q1 K; f5 G0 `# F% g# s! h, q plt.figure(dpi=150) #设置图的分辨率9 `8 B( e$ _6 p/ G7 x3 {
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
, @6 S+ ~8 G8 X! ~" U( y, b iris_type = pd_iris['class'].unique() #根据class列将点分为三类1 W: t0 o+ H0 R9 r; p m7 O, F2 l
iris_name = iris.target_names #获取每一类的名称* i* ~: ~! p! i7 p) @
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
' b- U. @, z0 Q1 Z9 q% S markers = ['$\clubsuit$', '.', '+'] #三种不同图形
8 e1 |3 ~! e3 h" Y0 X, v- n ; G, A" m+ L! W9 a6 ]
for i in range(len(iris_type)):
/ ? O+ |; L9 s% R7 l3 r5 S plt.scatter($ E/ b8 }$ n0 a3 S
pd_iris.loc[pd_iris['class'] == iris_type," f- z& Y* `$ v" z0 e
'sepal length(cm)'], #传入数据x
( h* W4 W' O; y, N6 ]" o pd_iris.loc[pd_iris['class'] == iris_type,
$ b) a; O& q' z H$ m0 S2 {- ? 'sepal width(cm)'], #传入数据y
& m+ L) w1 \3 H$ R* s e s=50, #散点图形(marker)的大小
# H" g; C; {3 e, ~9 |. i% ^5 A- b c=colors, #marker颜色
7 @. Y! R0 q& u9 M; L marker=markers, #marker形状3 L' H* H; G6 [. o% U2 @- z2 \
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
( Q: t0 e5 t* q( T# { alpha=0.8, #marker透明度,范围为0-1
5 R( }! J5 n" Z' f facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c9 R- E0 Y/ [% M7 l$ A$ m
edgecolors='none', #marker的边缘线色- u; U. X1 h- [1 ~& ~/ j
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用* ~/ X. q6 \7 b" Q+ Y4 J2 ?2 p I
label=iris_name) #后面图例的名称取自label
4 i' C, O4 r! l% ^" Y4 E
+ \9 O0 M8 t* q0 u; q6 R plt.legend(loc='upper right')
_; Q. m2 J8 c
4 Q$ R k* V' v2 Z: G' c! B
7 `2 @( B3 s2 l4 R" C1 C————————————————
* |5 z+ Q! r' [9 n版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。1 @! o. s, b. I. Z! O& ~7 B
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
1 U% p' }! q' m3 @4 n# N5 o8 P" q
+ \( W4 U9 Y% x& W3 l! G2 r! N4 S9 L1 o+ A, v8 i
|
zan
|