- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563371 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174234
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
) Z4 |0 [/ A, e! d, Q一行Python代码有多强,可让图形秒变「手绘风」
( g A$ y/ X& w! n! H( x5 F4 u之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
/ C4 F$ L& d# S7 R H
0 i, u# t7 v/ }% z, M
- `7 `2 x9 F- G2 X但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。" W( \) ^/ C2 G7 E* p# `7 f) ~
. T+ z q5 h& q8 o: I9 g
4 |: J9 \5 R3 A# @5 imatplotlib.pyplot.xkcd()简介# [% Z3 {) u# K2 M
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
( {2 j7 K+ l- u9 P7 V" `
0 d0 K1 Q9 G, J% U% w
( o9 h; m7 B/ _# C6 K8 Umatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度; Q6 j2 R5 o3 h0 q* i
length=100, #褶皱长度
) \; O* p! s4 l n randomness=2#褶皱的随机性
8 T8 k0 f( `7 z. m% S8 ]% T )
- a* @# `+ `& Ymatplotlib.pyplot.xkcd()使用
8 [+ l' ] O$ j0 E1 z2 e) {如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
% q$ G, d4 @/ _" Q3 c- r u$ M# G$ D, b! F: K
v" E! L U9 C" i Lwith plt.xkcd(scale=1, length=100, randomness=2):4 P. e" f$ K' E0 z0 v+ q5 D. b
#with是临时使用一下,不影响其它图使用正常样式7 l; s8 L4 D! f$ v7 o
绘图代码" h% s! E4 P; O; o7 ?) W* p
。。。。。。4 C8 j* B; Q: i
plt.show()
+ a4 c# z7 ^' S: \& |) Y9 smatplotlib.pyplot.xkcd()使用实例
- I6 ^- I+ v* d V/ i- U- B5 }6 }下面代码为pythonic生物人公众号之前的文章代码
! k& F. V- w# ]' T6 `. C# ]+ i+ J7 G3 {" M) F) P
: ?' V( g& [2 _5 P v- I* c3 m: D2 k
以下参考:Python可视化25|seaborn绘制矩阵图
* d y$ T$ f5 q5 c1 {& U6 ?& n3 |
6 @0 O% ]& h* _1 N. \
, B0 i) k# N1 D8 j* Z#支持seaborn
/ ~: g# z6 f! z" Y0 D9 y! L6 Aimport seaborn as sns
$ |) I! s0 C' I4 \, F! N7 m7 uiris_sns = sns.load_dataset("iris")) y; Y1 w4 C; n7 O& w, P) T
with plt.xkcd():2 i! {7 a/ N9 s) B# h+ t
g = sns.pairplot(
% z0 o! k* Y5 A iris_sns,, u X" ?/ m. k$ `
hue='species', #按照三种花分类
' o) e" M2 d: C% F. \6 b- C palette=['#dc2624', '#2b4750', '#45a0a2'])( ]4 M- @. ]5 v
sns.set(style='whitegrid')
$ J9 b/ p5 d1 }% D( K+ {3 o g.fig.set_size_inches(12, 12)" N# D4 ^/ ?) Q- J
sns.set(style='whitegrid', font_scale=1.5)# n1 |- c. L1 ~* v4 [
5 o6 T; v8 |4 D/ n
* \$ W9 l8 p. ]. ~# f! V
& K- R. n7 @* w3 P以下参考:Python可视化29|matplotlib-饼图(pie) ( ~1 m0 `7 D; X9 ~
. w3 l: N1 |* @$ y/ F" i
/ m+ k. e9 r4 k# pimport matplotlib.pyplot as plt
! A. ]% \. H b1 I) z: Dwith plt.xkcd(" p5 H3 F2 U! Z1 v. [
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度4 @ U9 Y7 w$ e
length=120, #褶皱长度4 l9 g0 P" x1 e3 V# c6 c
randomness=2): #褶皱的随机性! p9 u" I- H* p) u9 \
plt.figure(dpi=150)7 g7 [' u8 F; y- q% z
patches, texts, autotexts = plt.pie(9 v* I/ U* |( F9 f" D
x=[1, 2, 3], #返回三个对象7 g6 t. t8 l/ ?/ b. l9 I& m1 v7 w( d
labels=['A', 'B', 'C'],
& u2 M" t5 K2 g$ e4 C7 T colors=['#dc2624', '#2b4750', '#45a0a2'],/ g0 v0 {- P% Y, H5 N. T$ b4 f
autopct='%.2f%%',
Q/ k! q9 v, x8 ?+ E7 P: d explode=(0.1, 0, 0))
' U# u1 \& A1 y7 m9 R2 W texts[1].set_size('20') #修改B的大小7 q" G2 d* y" H( ?( r$ P
. e1 i4 s( q( X
#matplotlib.patches.Wedge
+ Y4 T! h, F! \5 w6 l [% \ patches[0].set_alpha(0.3) #A组分设置透明度! V4 E, O7 |* G6 S: n5 H$ N
patches[2].set_hatch('|') #C组分添加网格线
5 P# r2 J, c' Q' H) V7 I9 j patches[1].set_hatch('x')
- P( {- _* A/ ]# ^8 n6 T " U3 I8 c: F! z' H n9 |
plt.legend(
! u! S, v& I( q$ Q patches,- Q9 s9 b7 K) o/ f6 T* T8 J& u
['A', 'B', 'C'], #添加图例: [( A5 u$ G* Q+ Z- i$ C% _, L
title="Pie Learning",
1 P* S5 V# i/ V5 {2 j. d loc="center left",
8 ?9 h4 N, x0 M% W- u3 e* g fontsize=15,/ D5 W) Z1 w+ j2 O' T4 W3 N( T8 y) o
bbox_to_anchor=(1, 0, 0.5, 1))( l3 b1 G% Q! d
/ g4 W, V6 c) C5 x, B
plt.title('Lovely pie', size=20)* D8 {6 a4 }( N
plt.show(), e! e$ r J/ Y# @4 w
* r6 w; W. e! l6 W$ c3 R" \! [% y. `9 n o6 J
, e. y- t7 ?: ~# E: o% u( z6 [. o/ }/ V( I) C, x
with plt.xkcd():
4 b, @4 g% }" [9 v3 B c from string import ascii_letters
2 I! B& b; d+ U- q! b/ Q plt.figure(dpi=150)
. ~/ X/ ?, r1 Y& \ patches, texts, autotexts = plt.pie(" d9 P. r0 Q* T" M+ M
x=range(1, 12),3 Y& N2 s; Z1 B- v R* N
labels=list(ascii_letters[26:])[0:11],
# S1 H6 p" j2 o, m- V colors=[) t7 u" o0 c9 [* t
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',& o% K. s1 U3 }% V- m
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
) I0 n- [3 F: P ],
9 f0 I2 v# H5 x- C2 I1 d* b. p autopct='%.2f%%',: j. t2 x5 J, Z& L* }- P
)
8 l E: ~/ E/ E1 Q) x# ^. g& t$ X) g$ ~ plt.legend(
i; w) l9 D2 q! y0 E patches,& I% O: k7 k4 e1 I
list(ascii_letters[26:])[0:11], #添加图例
4 {, W- T. N$ e( e2 W title="Pie Learning",7 q; a, C8 ]8 B
loc="center left",
l3 ]* N: B2 ~5 ?; ] bbox_to_anchor=(1, 0, 0.5, 1),' x6 M5 W) ~, r; g4 W$ a( ?
ncol=2, #控制图例中按照两列显示,默认为一列显示,3 Z j0 e" b4 O- ^
)3 `0 A* }' D' r/ B1 j; a! y. r$ b, K
9 C5 l% }5 F% G$ [+ L' O
( M3 i: Y) N; s# G( C1 U* W
[+ ~1 o# ~& f" u3 _9 @6 E
' Y; v: n9 y$ {import matplotlib.pyplot as plt
# y3 R; o0 X) u# Q ^import numpy as np0 W4 y+ i* Y! h }7 V
with plt.xkcd():
" C8 U: T# }" ^) M5 Y% d plt.figure(dpi=150) l7 } B- }% h5 O
labels = ['Jack', 'Rose', 'Jimmy']
( ^+ Q) K6 D9 I year_2019 = np.arange(1, 4)' r8 H1 @4 W+ }! |
year_2020 = np.arange(1, 4) + 1
: C0 ~* m) v- P1 J+ J bar_width = 0.4# S9 v. I! G# d: l- }& e! G. f
* f S5 O5 {6 L: s* Q/ ? plt.bar( g, P; _/ K$ x' X: @2 E+ Q
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽6 n) V% E% r2 ^* Q% I7 f
year_2019,
1 l% L8 G) ?% } color='#dc2624',
+ J( }, a& Z' P4 o width=bar_width,
# u8 F* `* D! t0 ~# r, B label='year_2019' #图例6 M9 n- v) {2 k" |' ^* Z6 K
)7 V9 o _% B3 ?/ M
plt.bar(
% s/ G4 S6 @ A7 |/ l2 w+ V np.arange(len(labels)) + bar_width / 2,
) y0 F/ J! ]" W8 j; |# Z/ | year_2020,4 l: a2 ^2 [! N0 G3 s
color='#45a0a2',9 F( }# o- p* ~$ r! l# E3 r
width=bar_width,9 Y$ J' m3 U f1 n* ?
label='year_2020' #图例3 G: ~2 c% l3 k3 f# _ T
)2 h- h4 c+ p# ^6 n
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称& G7 J: }3 p/ U. ~
plt.legend(loc=2) #图例在左边: m7 ?8 n. o) W; |
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
: ]* E/ E* G6 R) R' X- l0 F
) }+ [( b5 d4 @ y1 O( v2 r3 b: I. s' G6 J
% t8 {& @# L6 p6 f( X; W$ l# c7 E5 O! B1 G5 f$ s6 y- i
! Q% P l& j# z) a/ P- P5 s0 F4 G* a' e' j% u* |4 I; Q% ?
以下参考: Python可视化|matplotlib10-绘制散点图scatter
2 }$ K1 m2 n4 S
# L* m# n! Z& A6 B& D% b& R( u2 H( x7 U
import matplotlib.pyplot as plt
1 `8 B2 F: J/ A h* m+ nimport numpy as np
+ p; n8 v! }' R( E! yimport pandas as pd! h* O! \+ `5 t. s: t
from pandas import Series, DataFrame. `/ B/ D5 H- P# D0 X( m0 `
#数据准备
; _$ K, h, n# m3 a1 W2 A3 Afrom sklearn import datasets6 e( _* E2 l, p- M6 K! g7 g
4 j5 k& E3 v4 p, z8 i. E0 Liris = datasets.load_iris()2 h8 i4 m7 s7 {' Q
x, y = iris.data, iris.target1 ]5 W' Q6 R& Q- I
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
0 P I+ `5 Z5 z5 s0 [- x `7 ? columns=[) Q p- F2 W; V0 Z8 c: g& P
'sepal length(cm)', 'sepal width(cm)',
1 H7 I; e" P: A; C7 q. I1 I 'petal length(cm)', 'petal width(cm)', 'class'
6 N0 M2 x& H$ j) k ])
, v1 p. y u; I% w- Zwith plt.xkcd():/ r/ X' e4 C+ P4 d, \6 E% w- s
! o4 m' Z% w8 h, h! g
plt.figure(dpi=150) #设置图的分辨率
! m/ @3 v& E8 K2 v #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图& N9 P9 y) y/ l9 B% P$ V, x
iris_type = pd_iris['class'].unique() #根据class列将点分为三类
$ U" L d8 f' V- _2 C" \/ o iris_name = iris.target_names #获取每一类的名称3 Q* b" p$ ?4 R/ r3 v
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
( V: }' } a$ B( G9 x markers = ['$\clubsuit$', '.', '+'] #三种不同图形
: A) k6 c/ ^- A: s" {" A
5 X8 O( D; y, C4 L+ W+ }4 ?, c for i in range(len(iris_type)):
: `; V# R' C+ Q! r; @ plt.scatter(
" }% e; q- ?& z" z pd_iris.loc[pd_iris['class'] == iris_type,7 i9 ^2 O- l& `- `- }* |
'sepal length(cm)'], #传入数据x
1 v( h6 {$ y1 J y& z6 r2 q pd_iris.loc[pd_iris['class'] == iris_type,
/ O/ N) s& Q+ F. U& t; Z 'sepal width(cm)'], #传入数据y
/ Z) A# }! i# q2 ^ \3 d s=50, #散点图形(marker)的大小 N c! ?& `. y8 o
c=colors, #marker颜色
. ]: P( w- `% I1 F: Z {5 _ marker=markers, #marker形状4 F t5 y5 g. |( z3 C
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
: \2 f* R3 V6 W! h1 x. R9 @ alpha=0.8, #marker透明度,范围为0-1
: [# c, i- I1 h) k facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
' @, v/ m0 `3 t edgecolors='none', #marker的边缘线色/ O. Q. ]2 |$ Y6 j" s! N$ Y
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
# p' l' e4 {: e! m2 k label=iris_name) #后面图例的名称取自label0 B2 s% D5 j3 x8 @& u
" J M4 d% I. L( z plt.legend(loc='upper right')) q" q$ S8 h9 s! n
' p: b! H% P+ R' n9 n2 A! |
' Z8 Q( E+ k! U) W P, I8 o
———————————————— u; S: \7 P2 @3 y) E
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
" w8 M! Z* V% p& s原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753! T! o( O" f+ `9 X" c0 t
1 I/ i& @- S) O1 l* o6 f1 Z
! y( e' m0 o/ A8 i |
zan
|