- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566425 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175150
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
1 ^: A. O0 i( }8 {
一行Python代码有多强,可让图形秒变「手绘风」
) v, D5 X: k9 ?+ x3 B+ J" S- I之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
+ j; O& ~$ t; s e: g3 l. M8 }" o+ n5 @5 B' v9 I1 e5 I
, b% Y6 L4 c% }( B! t! C" d
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。 G' H+ x% q- w5 [1 \! {& V
# h. \" W; |& x) D: u$ M, z0 M
! f! W' W! A7 O$ S
matplotlib.pyplot.xkcd()简介- D0 c# h# ~- C* w7 t
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小* |$ f: }" S; q$ x% h7 c& T, w: z
; b$ X4 h7 D( @# Y" Z/ k' j
' E5 i* {! ]. `9 o% ?matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
5 R5 n( F# @+ {: c length=100, #褶皱长度2 L7 j$ z+ n; d+ L3 e4 y- l
randomness=2#褶皱的随机性
$ q6 H) c9 P7 F0 f9 l5 J )5 l! O/ L+ \7 J- ?; D, d( `
matplotlib.pyplot.xkcd()使用
9 J9 o" t3 S3 e* o) T如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
6 j5 B O6 ?6 b9 E( M4 L! p: t
# }/ E7 U- e) @# N% s8 z0 ^2 n/ d/ m1 C
with plt.xkcd(scale=1, length=100, randomness=2):
, ]: C& u- H7 j9 M#with是临时使用一下,不影响其它图使用正常样式6 A, x3 \# i9 {$ h
绘图代码9 Q: {" v5 x3 d
。。。。。。
% m/ i9 |8 J+ o/ i. w, z plt.show(), \9 \( p/ k8 r/ v* N
matplotlib.pyplot.xkcd()使用实例 4 ~; p+ f8 O* L
下面代码为pythonic生物人公众号之前的文章代码$ @0 h- g: L1 _- C& o0 x* a
/ [: a. o% G* b: H0 J, m$ p8 [* F ]- @' D; L% B; }7 c a
以下参考:Python可视化25|seaborn绘制矩阵图
\3 ]- D- E. u# M! V$ h5 u" e# h; e
! T; h+ E0 T l
#支持seaborn
* k# Z' @9 @( iimport seaborn as sns
% z5 G3 }, k+ C: K7 Kiris_sns = sns.load_dataset("iris"): Y: ]% H6 F. k8 \) D8 {
with plt.xkcd():
4 @4 d2 w `: J8 X g = sns.pairplot(
# i1 ^: {: G/ `; e: A4 ?6 @ iris_sns,6 t: Q& B) V2 j4 G8 }( W
hue='species', #按照三种花分类
, o# o$ h1 V8 N* d7 g1 j palette=['#dc2624', '#2b4750', '#45a0a2'])8 _2 |+ w1 O5 o8 L! o
sns.set(style='whitegrid'), @5 A4 r. a& `; i
g.fig.set_size_inches(12, 12)/ k% m8 b) ?; l% e: ]5 z9 V9 |
sns.set(style='whitegrid', font_scale=1.5)
: O& Z. s7 i2 n4 ? t; `9 h 2 W, _. E1 Q8 j0 x* E
. @' _( H( X' W+ a+ Y
5 d: X% {# v/ K+ X8 m$ F9 L
以下参考:Python可视化29|matplotlib-饼图(pie) " \' g- x0 n( v5 }% I" D( Z
( W: ]/ g: d: p O3 v
' J/ c( U* h$ E: `/ @) W
import matplotlib.pyplot as plt' u+ t; E1 ~; r: b h! Z @
with plt.xkcd(! M3 ~5 }4 S0 O$ ~1 Y
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
; }) F) f- @7 ^ length=120, #褶皱长度% B: h# d- x! E f% H. T. l
randomness=2): #褶皱的随机性
: d5 Q* `2 k% p% e plt.figure(dpi=150)+ G9 ? _. R/ } @. g/ l
patches, texts, autotexts = plt.pie(% K. h$ ? e- P, I. N/ a) @& o
x=[1, 2, 3], #返回三个对象
( V6 }# @- J5 T$ N, @5 S7 y labels=['A', 'B', 'C'],- o9 R" a! R4 ]7 ?
colors=['#dc2624', '#2b4750', '#45a0a2'],
5 X- H9 z% u- | autopct='%.2f%%',
; }0 X8 F/ D! }7 C- }, }3 z explode=(0.1, 0, 0))! h3 F& A/ T& x4 @, E
texts[1].set_size('20') #修改B的大小. }, g( E7 O2 F/ X' ?
% Q v; b; m3 z7 r+ F/ I9 F) ~ #matplotlib.patches.Wedge
# W1 Y. U6 E1 W patches[0].set_alpha(0.3) #A组分设置透明度
% l6 G6 R1 F9 E- N patches[2].set_hatch('|') #C组分添加网格线
* X+ Z$ d# C7 J patches[1].set_hatch('x')- a: W' e- j' @$ o3 O8 d
* N+ O* V& U2 h' u5 Z0 z% j( d
plt.legend(
1 I# G. Q/ y$ M6 A2 ]2 d0 w& T patches,2 e* p8 ~5 h, a$ I: M9 P4 k
['A', 'B', 'C'], #添加图例
: e4 O8 R0 t! c( a title="Pie Learning",
/ Q$ o* ~; f* \# s- _- A loc="center left",$ m9 _' f0 @: {- X0 F
fontsize=15,
/ V$ R8 g( g1 M' w bbox_to_anchor=(1, 0, 0.5, 1))
# T7 l! j ]# i' v6 }6 I
2 I' [/ w; Z G5 }: y plt.title('Lovely pie', size=20)
8 {% l( v6 a0 C: R0 t, E8 R2 _& \ plt.show()/ R+ k. {- V& e
3 R# }: ?9 P& d
7 U5 y Y: V7 U1 V9 _* ?
* l8 t7 R" R) w8 \$ }
% ]5 h& n0 I! s* Lwith plt.xkcd():
/ k. T5 U& g; a# x/ {4 K. Z from string import ascii_letters
" }% Z/ `1 N9 J- D- E plt.figure(dpi=150)
7 O: B Q0 P7 c% y5 E patches, texts, autotexts = plt.pie(" |; R2 D1 e0 G2 |) y2 s; O0 o
x=range(1, 12),7 F! U7 r" U; O
labels=list(ascii_letters[26:])[0:11],
8 V) \% c4 p+ a/ c1 m( b" m$ V colors=[8 ?, k' ^) n* l" ^2 W( ~
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',/ r2 @7 N0 I- q5 V9 {
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'/ m& ] x `, h2 m n: Y: P
], j6 v7 f; R6 ]- v* r+ B
autopct='%.2f%%',
! \% v7 V# o; o, e )4 }3 \; i& O4 x1 m, s
plt.legend(
* \! V3 s- Q$ [- h% w patches,$ N/ I1 R: m6 z4 a' ]3 o' r
list(ascii_letters[26:])[0:11], #添加图例
) u* ~. L c' g5 b* J8 K, Z* V title="Pie Learning",/ H8 W4 m2 P+ G$ Q. N0 ?- Z
loc="center left",8 W4 L _& q2 ]/ J
bbox_to_anchor=(1, 0, 0.5, 1),& ], Z. c* J- A9 z
ncol=2, #控制图例中按照两列显示,默认为一列显示,6 D. ?" Z4 k: w, T! l8 @
)
3 ~! k; F) \8 R/ V- @% [! u9 _( {, \! E
" o+ O6 {9 \, G% ~( u: w) ?, {
' ?, h4 V1 s% D" J" P! s
' Y2 G! s+ M: u8 m9 m4 V
import matplotlib.pyplot as plt6 Q3 V4 F8 R. \
import numpy as np
* z' i( _! W9 O7 k3 J" e$ B, Twith plt.xkcd():# Q! Q& o9 ^4 D2 ]
plt.figure(dpi=150)
* {$ M6 y4 n8 V8 X0 F+ ?7 Q; R labels = ['Jack', 'Rose', 'Jimmy']6 z* K' b1 @2 g8 \, ~
year_2019 = np.arange(1, 4)/ P4 L( E9 N5 {) ]
year_2020 = np.arange(1, 4) + 1
3 F" n* C3 d5 }4 v4 Y4 k8 ? bar_width = 0.4
! l$ q. }" m7 I# Y ' v9 c4 u5 N! t# ?
plt.bar(
" B5 o Y0 c% L& u6 | np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽, ~' q2 j; {# A8 Z$ D( u; n
year_2019,
) u; S) B$ \( D8 j" ^) L color='#dc2624',
" Q% O# o4 a" f4 j9 M/ F width=bar_width,4 ?; `& q; D1 I S
label='year_2019' #图例4 X7 `4 x6 K- V
)
E. L8 \+ A3 e3 g plt.bar(9 g4 N, v& b2 e6 N+ K
np.arange(len(labels)) + bar_width / 2,) u- N6 K1 d5 g* S5 r- P, c
year_2020,
% [, m% |9 W% l) i3 m color='#45a0a2',8 e% o/ Z: x8 x' }
width=bar_width,: S4 ^; \/ a& E" o8 ~. U
label='year_2020' #图例* E' @! b, d- o4 }5 B
). r; e( n; J M8 O( q6 \, P
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称' r! L' _ l+ c
plt.legend(loc=2) #图例在左边
; Z. N6 E) E' y [% p以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 ; a1 Y* Q$ J9 p' G( E g) I: V
& W; U* s1 l. M0 _% o- R6 G
8 v# s/ g& j4 l$ D: L! ? j6 m9 t: `0 w, i, Y" I) T7 x
+ \: U" @) I% C; G9 i, r
! k8 F( E0 U, Y0 [
! d! i7 w1 r; d( I* o6 T) H( I0 Z- g以下参考: Python可视化|matplotlib10-绘制散点图scatter R, n6 i6 @& }# x/ Y
. C) R% x5 ~* |, ~7 e5 d
8 i9 k- q/ {+ O) o" k2 J- ?import matplotlib.pyplot as plt1 S1 _9 Q, x0 ?- u1 J
import numpy as np; s. B- N- f. k% o+ C1 c# J
import pandas as pd
2 [' u4 o. [1 O `5 Gfrom pandas import Series, DataFrame
" F% A4 r" K/ W' z* R#数据准备8 D3 e6 e/ z3 m1 z* R i3 T& G
from sklearn import datasets
9 L( n* L% O( m h) b 3 b. P' @! V( `, ?0 X
iris = datasets.load_iris()0 v5 g X$ K0 W' u% I
x, y = iris.data, iris.target
" P M: \: X! }1 r, Apd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
- {& O1 t8 C1 B8 D* E columns=[
( y; p/ b' {: U: N, ?. k1 ]4 S1 x 'sepal length(cm)', 'sepal width(cm)',
3 q- `5 E7 \0 |, ?. m9 ^ O 'petal length(cm)', 'petal width(cm)', 'class'
7 N4 _+ _# q/ r# S( p8 H ])
9 Y0 D% Z: v i% v" b+ Nwith plt.xkcd():
) k& x# ]8 X5 i" K& H! q2 _ : H' ^1 k" A/ {4 a ^- ~
plt.figure(dpi=150) #设置图的分辨率
) c1 c! D j; U% {. ` #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
& F6 H* e4 ~: v2 W# R" T8 w iris_type = pd_iris['class'].unique() #根据class列将点分为三类2 h" q" T, C7 L9 [3 g
iris_name = iris.target_names #获取每一类的名称
8 U% J9 O1 K$ U3 K colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
% v$ G* _5 i0 e$ P/ U( {" k markers = ['$\clubsuit$', '.', '+'] #三种不同图形: t4 i9 s" u+ F1 v' H
- V Y# t9 U/ t4 x
for i in range(len(iris_type)):
2 U1 N: j3 K- S5 M* v) Q plt.scatter(
8 d9 S' U N3 ^ pd_iris.loc[pd_iris['class'] == iris_type,
8 I+ w6 n, K3 O5 B& j5 ~# I 'sepal length(cm)'], #传入数据x
& b6 E' U+ a2 O# V- G1 q pd_iris.loc[pd_iris['class'] == iris_type,
: L' \6 A' \2 ]6 y1 w5 Y9 w' a 'sepal width(cm)'], #传入数据y
9 h' _; m7 V% c; Y! A* M s=50, #散点图形(marker)的大小" @8 D4 ^+ y' N1 w) G( t
c=colors, #marker颜色) _4 a" z) ?2 _4 }
marker=markers, #marker形状
+ d+ j3 N7 J" N( p8 n #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
, R: p# f! J, s1 [ alpha=0.8, #marker透明度,范围为0-1
$ Y7 N: C) L+ r2 S. y& o( d facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c, p) J; b. W4 T2 b6 j. c& f
edgecolors='none', #marker的边缘线色
0 l( g% o6 \5 A' c- P1 n$ f linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用: k! l" g, S6 Y1 N g5 B
label=iris_name) #后面图例的名称取自label1 s6 n( W" S$ b2 W' Y, T% a: t
1 h$ H+ o" T! h7 N$ ^
plt.legend(loc='upper right')
4 E& `3 K% u, ? g7 f$ g( k) Z5 {7 w6 l1 Z1 P1 a& ~9 p
8 z; G3 u5 H2 t5 z& p
————————————————
) _/ k* Y l5 A1 M! _9 n版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: x; w, n# _: Q4 B+ N1 ~4 e+ ]( N& R
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
* }& e+ Z( r. ], d- W; e$ b& j \/ @. h+ G: Z. ^
, g( L6 y8 m; x# S" F; Z. j
|
zan
|