- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558588 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172949
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
0 o, f u+ V5 B6 F7 V一行Python代码有多强,可让图形秒变「手绘风」8 C3 ~1 i4 U& i2 {8 x2 R9 E. V/ q, O- N8 U
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
8 u* |) e( O0 e- @0 U1 I1 o5 M" y3 H7 _3 l7 m" x' w
6 M2 y! v$ k* U6 U) E% x但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
& ?2 t; o4 |' f7 n1 Z' g& H8 L; B6 i4 p0 A% T3 c4 ^' F2 ?8 L
- `$ {. V( Y N
matplotlib.pyplot.xkcd()简介- H2 h" v3 ^! }5 U6 O
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小2 s. l) y5 t0 M" a
' s6 G, S5 W O4 s9 Z( P
) _8 G( y5 P- m; E; L1 Wmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度( H; v' I8 W- m
length=100, #褶皱长度
. r' L1 s5 S% k1 A" i9 s+ T randomness=2#褶皱的随机性. @* w3 r- L- Y* U
), S2 d' Q. c* v6 z# k
matplotlib.pyplot.xkcd()使用4 Z' d" I6 Z! w Z, D4 z
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~# z- _% n9 u L- f, j
/ k. D9 g! V4 w% w6 }, O7 e6 \3 m0 s3 i
with plt.xkcd(scale=1, length=100, randomness=2):0 U: X6 y. `; O
#with是临时使用一下,不影响其它图使用正常样式
, T7 h0 T* D# g( t' z 绘图代码
) k% H% w0 m p3 t( P6 w 。。。。。。
- a+ q, `& c; M1 t, j. ^ plt.show()9 W* `2 F. F: @7 p. h
matplotlib.pyplot.xkcd()使用实例
. O* N6 l* a" A4 x2 x& }7 M下面代码为pythonic生物人公众号之前的文章代码1 T$ B, n" T( | |& b
/ \5 R+ x$ e0 {; l: s( o# ]
# y0 d0 U' p8 A0 ]3 M
以下参考:Python可视化25|seaborn绘制矩阵图
& G" s. E. s( e+ ]/ W
8 E X5 T" Y! s- n8 S, m; |4 k$ F8 t5 a6 J$ s' h
#支持seaborn/ \9 r" l( d9 b' h
import seaborn as sns
}4 r8 x$ `7 z0 ?0 F2 yiris_sns = sns.load_dataset("iris")6 q5 G2 [# a/ T% F8 Q$ N- J
with plt.xkcd():, e: m ` q5 H
g = sns.pairplot(
4 s- {& @9 V% @/ A* H iris_sns,
- `, z9 l* A0 m! R hue='species', #按照三种花分类
1 l8 p M! q: u5 z; \; P palette=['#dc2624', '#2b4750', '#45a0a2'])0 V/ b. \" {- \- D0 E3 R
sns.set(style='whitegrid')* G! ~ ^' u/ D" ^* V/ H
g.fig.set_size_inches(12, 12)$ X9 u# \5 N( L8 r! I+ \3 @: m
sns.set(style='whitegrid', font_scale=1.5)1 g$ ], V. |0 J. w: F# x& M- L/ F
$ C4 }! W; p e
; k3 c+ I& k! Q! \4 U
$ \5 n! H! g3 F' m* P+ V( G以下参考:Python可视化29|matplotlib-饼图(pie) + M" x- y# P0 w5 \
( q6 n& t; g6 Y4 ~
, X d% B: r8 Q( T# \
import matplotlib.pyplot as plt
2 w$ a: }. w6 T$ k' e j, Awith plt.xkcd(
/ Q9 p7 F+ o( q+ Y/ h scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
$ {- n% U2 }# L) B length=120, #褶皱长度
0 |* b( ]( W. x% u% E% i% n, P randomness=2): #褶皱的随机性4 f! X7 ^. `% ]5 |$ S$ {0 W
plt.figure(dpi=150)) J0 k! |; ]' ` D' ~6 c$ p8 T1 Q! i
patches, texts, autotexts = plt.pie(
, l- c& R- i0 I& O0 l7 x( r x=[1, 2, 3], #返回三个对象' \! O/ _8 d2 ?
labels=['A', 'B', 'C'], e' s2 H6 X5 Z
colors=['#dc2624', '#2b4750', '#45a0a2'],* ^9 ^- T! X+ a
autopct='%.2f%%',/ Q! G# l& i S8 W& W) D- f W
explode=(0.1, 0, 0))5 Y+ e* U) L, [, ]8 B
texts[1].set_size('20') #修改B的大小$ x1 q7 _! B+ q" Z: m- m
* d. @0 p j' n/ f
#matplotlib.patches.Wedge
- g9 h8 Z% d" l9 t+ s: r) r! d1 Y( Y patches[0].set_alpha(0.3) #A组分设置透明度) g! t2 u( S, M3 A; a/ E
patches[2].set_hatch('|') #C组分添加网格线! L+ n2 l! i9 l5 {* b. V
patches[1].set_hatch('x'); ?' R' t6 i. b# _, d
7 h+ A. K2 q* Y: R- i+ H
plt.legend(9 f- i& d7 Q. P5 |$ }1 n Q. n
patches,
3 Z) X8 V1 ~; h+ V( I+ N ['A', 'B', 'C'], #添加图例7 U9 P" } i- e. e
title="Pie Learning", s/ w6 E" V/ R5 q/ w6 m8 Q) g5 }
loc="center left",2 v& J0 F; e& h( x1 s7 M
fontsize=15,* W [' a4 o3 [, \
bbox_to_anchor=(1, 0, 0.5, 1))/ M* {; _. w0 _3 d
! [4 |* W* Q6 @1 @
plt.title('Lovely pie', size=20)
0 a, @- l; N, m. d4 x. @; z/ g plt.show()
; L$ R# s9 J% e2 F, W+ E
3 q6 z& D, T+ U1 O5 f6 n/ v
$ f. J5 v4 R; O. s( X8 T4 i& X# {: n! `* n( [. z
/ X2 @+ M3 L/ y7 R* Uwith plt.xkcd():# _% H, q' G" D, U
from string import ascii_letters0 R, p+ Q0 P2 L) g/ d
plt.figure(dpi=150)
* K5 j g! B- Q" ?. I% c3 N o patches, texts, autotexts = plt.pie(6 n; O1 i, W) K, b% c
x=range(1, 12),
; A/ _% [- @5 _0 s* L2 I labels=list(ascii_letters[26:])[0:11],
; s+ b3 _9 I6 G* |( \ colors=[
+ y) v1 p; I& ]% W2 ?) I '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
& m" _$ e5 j8 Z8 f; ?/ p* p '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'2 o7 p8 M' y5 J
],: o! c' e) V$ Z
autopct='%.2f%%',0 a: l- ?$ ~2 w- {' c5 F% l4 ]
)# ?# k4 b7 s6 L( ~$ ?) m9 h
plt.legend(% R# D" U0 H0 l% W' U; \! I# C
patches,$ m! B M5 ]1 K: ~. s
list(ascii_letters[26:])[0:11], #添加图例
+ l9 s$ C9 a/ V" L title="Pie Learning",
# [8 R* f6 q( ]% P& r, N# ` loc="center left",! E$ [- E6 b* U, y
bbox_to_anchor=(1, 0, 0.5, 1),
: x- {; H, \5 L c. `: S2 R ncol=2, #控制图例中按照两列显示,默认为一列显示," x) V7 S+ S# l
)) Q( L5 D' s- S% @) M" \- c/ e
2 Q+ K. E7 d3 n: P) F1 T) ~
8 R d: c7 X+ F5 X& P& S7 b
& A+ q" H4 { x; u; s& L7 w5 u6 | i( U/ p$ i3 L
import matplotlib.pyplot as plt
2 d: A' r5 o* Z2 G! r+ z+ rimport numpy as np/ Y" m7 @1 H' m! J9 ]$ B5 b
with plt.xkcd(): O* _& S9 U0 O+ o
plt.figure(dpi=150)
# F t- ?2 w; a8 e, U labels = ['Jack', 'Rose', 'Jimmy']
3 s! \" p8 ] z4 D year_2019 = np.arange(1, 4)
9 [! K! b+ A1 j) ~$ p: J3 } year_2020 = np.arange(1, 4) + 1
( J' {/ ~$ v7 d7 o4 h bar_width = 0.46 s, O# G, p% U4 O" f* H) x u
4 Q! X8 t( M+ x4 h+ X2 B" g0 G plt.bar(, I; a/ d2 }" j2 i; t0 F6 g8 j
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
9 m1 d; ?8 H3 u+ h) S6 \$ G* H5 C year_2019,
& \" Y9 U0 o6 d* x1 ` color='#dc2624',
% j3 l4 E8 j% {4 ? width=bar_width,
# H9 }4 ?7 \' s. W; D4 d- d2 r label='year_2019' #图例
- \ a6 f$ x: ]2 d$ g- j! i )
7 @; ^3 u( m& J0 H plt.bar(, B' B1 N; d' O- Y( K
np.arange(len(labels)) + bar_width / 2,
8 V% m! S, Q, g$ F: u7 P year_2020,
' D+ b! V4 r2 v- _/ S' p3 F) Q color='#45a0a2',
* r& @8 v ~6 R9 e1 J' l- ? width=bar_width,
( b+ g2 S. I! w; e& ^; C4 W label='year_2020' #图例* F" p+ T* G H2 [: l7 k
); G. h( B, _/ e4 W$ I
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称* G5 x- I* v: b; K- f: b; f2 ?7 |
plt.legend(loc=2) #图例在左边' S. g' M5 A: k/ ?: V) T
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
@( t0 a0 S9 h' s! M+ ^$ Q. | U: G% _& ^
# | v ]# p2 }6 z
6 V V! V) f( Y0 M/ B6 x- j' w" A
4 G( \% T# T& E) F. j% X+ I+ C# s7 ?
7 x; C1 ^) l5 Y' I$ C以下参考: Python可视化|matplotlib10-绘制散点图scatter8 G4 D( n8 E1 b8 ]. r8 X4 j
$ k1 S3 A$ w: {) D: [
) @- w n! @& w& Y+ s# h4 y/ ~import matplotlib.pyplot as plt
. a d# V+ { D% T7 w8 P+ ]import numpy as np
& ^% [8 H9 |; z( r' d$ N4 Pimport pandas as pd
4 V1 @! {3 d0 K. efrom pandas import Series, DataFrame. R8 H9 J/ B+ w, d
#数据准备- t6 r$ {5 Z' i8 _: {) o8 J( d
from sklearn import datasets" m o+ H$ m. a0 K
2 p7 g" b4 a% N# h' ]- \/ x
iris = datasets.load_iris()9 x/ P, Y& O0 E e+ e- _/ D) s
x, y = iris.data, iris.target
$ n9 X6 X6 \8 f& k5 xpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),6 v) y, }* W& z9 v. o
columns=[
: q3 G# u& g$ }# B$ H 'sepal length(cm)', 'sepal width(cm)',
- i+ A, T5 p# o- }' x 'petal length(cm)', 'petal width(cm)', 'class'
) A. N: s) t+ @, h ])
/ w0 G$ `, B/ ~. j( \- Dwith plt.xkcd():
; L' n) v6 |! W: i3 C% S5 G2 |6 E0 w 6 r" O0 m4 r* v
plt.figure(dpi=150) #设置图的分辨率
& ^; |( j9 X j #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
! m7 s1 h% _- o4 m- p: P iris_type = pd_iris['class'].unique() #根据class列将点分为三类/ X* R) b! |/ v$ H2 }" \6 h: X
iris_name = iris.target_names #获取每一类的名称# j5 f* R: n. Z( v* e
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色: L: P, |% Z9 J
markers = ['$\clubsuit$', '.', '+'] #三种不同图形! b& k! }9 ^+ M% G
1 T: V: _) ^8 S- Q for i in range(len(iris_type)):
) ?' v3 e* h( {! a plt.scatter(6 m' u* P! h3 j6 m
pd_iris.loc[pd_iris['class'] == iris_type,
1 H Y) N3 F3 e+ z& A$ a* U 'sepal length(cm)'], #传入数据x4 \# ^; l" t ^5 p+ r
pd_iris.loc[pd_iris['class'] == iris_type,' r v' T" \' o$ o* n9 M' U9 b
'sepal width(cm)'], #传入数据y) f% E- \9 w. y9 o' m8 T
s=50, #散点图形(marker)的大小
* R$ z" q3 M5 |2 E! o c=colors, #marker颜色, h# l! o6 s/ d1 R. }
marker=markers, #marker形状7 D7 F7 @) ]" ?' {4 F
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充: W, I3 X9 b+ K% f8 O9 z3 p5 f0 m
alpha=0.8, #marker透明度,范围为0-19 R' b5 w3 u0 ]5 V4 P4 W0 Y
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
5 } z) b# r5 H% |) O- F& y, M4 f a1 o edgecolors='none', #marker的边缘线色" y+ g1 q' y2 N/ V8 f
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用" O8 R; o- C v6 X5 n/ o! i
label=iris_name) #后面图例的名称取自label
+ @9 _4 A: g- H5 B : ^( N: E! x v0 D: @0 Z' t( B+ |" a$ W
plt.legend(loc='upper right')
0 s5 ^9 Z( c5 I7 r: y6 h( b6 J# P
5 N8 Z* A+ ^3 z& U: _" r: A( O% Z' z7 c: n% e. P6 b5 e
————————————————
* x7 J, i8 j7 T' e版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
4 c. a. q& y% s原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
}3 z! }" x3 {) N* Y! [
% b+ A, j9 L+ I) i1 A; O" C+ `$ E* Z4 o
|
zan
|