- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 81
- 收听数
- 1
- 能力
- 120 分
- 体力
- 554084 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 171598
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
0 M' g3 [5 ~8 |+ q
一行Python代码有多强,可让图形秒变「手绘风」* [! W9 H& \) J% j" `
之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具+ |# F6 Q1 [1 U7 h3 o
( k9 x ]: l, m
6 G* I) _6 }6 {$ ~! p
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。7 e: |* i# ^0 K& y# i* A
# O& G- H! f8 ?, I! B
5 f' x$ c1 ?4 P: n! }' qmatplotlib.pyplot.xkcd()简介
- r) M; w0 m' s/ P1 g这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
0 o5 p4 a) h( g D1 K" }+ u6 ~; p6 h5 t
, w& N, D9 o+ v/ W8 N; Y
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度' g. ~2 v- {( ?
length=100, #褶皱长度
, N, P ], ^# l. t5 o) ` randomness=2#褶皱的随机性
5 D3 X" x) l7 M5 N )
' {! c+ f/ G. k9 imatplotlib.pyplot.xkcd()使用3 a4 A+ ^" e/ |8 f
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
1 l/ O' E5 d1 _* A- I
: ^' _5 ^$ f( }1 ~+ T1 Q. i- g9 y; m$ M" A$ I" `+ u
with plt.xkcd(scale=1, length=100, randomness=2):) U+ ~7 `' c# ^( D6 c
#with是临时使用一下,不影响其它图使用正常样式6 G. }* \: J% s, d7 U3 V
绘图代码
7 P7 d. G1 }5 s" k; Q+ b. H 。。。。。。
; [6 B8 j; O6 h S( B plt.show()( @9 F+ ?- U9 S. T# n
matplotlib.pyplot.xkcd()使用实例
1 @2 k3 |1 A6 B0 ^下面代码为pythonic生物人公众号之前的文章代码3 G# B7 C) j+ ~ t
6 O5 c9 d* B. @; _' g
0 l# Q- h B2 u) ]) ?) B
以下参考:Python可视化25|seaborn绘制矩阵图
- I1 b" t( M3 T8 U6 K7 N I. C% K( D( |: P% ?/ X( ?4 d. \
+ L# d8 f4 n5 ~
#支持seaborn. P" G' j6 x( l3 u8 j* \7 |* _
import seaborn as sns
, j2 k. s7 B3 T& q6 iiris_sns = sns.load_dataset("iris")/ z! |$ p$ c+ \* d8 b
with plt.xkcd():. m. P. ` u6 U2 P0 B
g = sns.pairplot(2 j. u2 e6 e! x' s1 [1 a3 L
iris_sns,
* w6 S4 v+ t% s/ r0 s! F hue='species', #按照三种花分类
k/ ~$ `) W+ }& }9 ]& ` palette=['#dc2624', '#2b4750', '#45a0a2'])$ w7 e. {9 U$ g* ^. L
sns.set(style='whitegrid')& Z- K0 X, ^" w* e$ v
g.fig.set_size_inches(12, 12)
# p/ q9 }6 p% G9 _/ |. i sns.set(style='whitegrid', font_scale=1.5)* e& v. h0 Z6 s8 b9 p9 @# T
5 s9 Y8 I: e- U6 k& J: I
/ b, D3 }" H3 W! j1 z9 |3 s
# `: y/ n5 ? i, `以下参考:Python可视化29|matplotlib-饼图(pie)
( w% i& E0 X% w2 C0 v* ?* w0 M* j5 c; X# h1 ?; e {) w
. k8 U' `& }$ p* C' K& o9 eimport matplotlib.pyplot as plt
4 T' t3 I, o |/ i) i5 @7 z# {, J. pwith plt.xkcd(& j ], n- S7 d1 @
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度( }& V+ {* d+ n! R( B9 u/ [
length=120, #褶皱长度
$ w V3 ^* S; R4 W) k& @ randomness=2): #褶皱的随机性9 S( c( p) `+ J" ^, x# b% m' M
plt.figure(dpi=150)& i0 K! [ j6 B. V. h% \! o* k
patches, texts, autotexts = plt.pie(
! [& i! ?+ `- a3 U( V7 g% y x=[1, 2, 3], #返回三个对象
1 C3 m; j$ k, V8 p' w labels=['A', 'B', 'C'], [- U: t, z: j' o0 e
colors=['#dc2624', '#2b4750', '#45a0a2'],
$ }8 f$ z! N! b; R! j& j autopct='%.2f%%',; G2 u3 @, |9 x9 }' I
explode=(0.1, 0, 0))
/ b: h. V6 }5 F. K1 e' V* A- q texts[1].set_size('20') #修改B的大小
2 t1 [1 p- {" e" c0 E$ E/ P5 Y) l - ?! k6 U. g/ @0 X/ y0 w* @
#matplotlib.patches.Wedge) s4 A. B) U1 M* g5 d
patches[0].set_alpha(0.3) #A组分设置透明度
9 [+ P0 {8 e4 ?3 e; r. R; U: G2 X; z+ Z& u patches[2].set_hatch('|') #C组分添加网格线
' d) z7 h1 U# W( F patches[1].set_hatch('x')
$ q) Q4 m T3 Q / C; w/ W# g( }. k& S' o5 Q
plt.legend(
1 F s0 J0 p$ O% c9 [6 s8 @ patches,# s$ c# m; f C. f. [0 P
['A', 'B', 'C'], #添加图例% K* w+ m. B4 P. T( F
title="Pie Learning",4 W) \3 M- l/ z! G0 H2 z
loc="center left",
1 \" d) U3 ^% Z5 g" I( n$ j) s fontsize=15,
2 C2 f) x. h) G* [8 b: T bbox_to_anchor=(1, 0, 0.5, 1)), h6 u! R4 n# J# d
) D5 _! `/ X3 w& Q& K
plt.title('Lovely pie', size=20)/ N6 O5 \% F" {/ L- W ^
plt.show()% c0 n6 x2 {( j7 j. a
( t5 S* f# M+ l) y6 L; j: S# a. w( o& \1 [! a/ Z
4 `0 r3 Z: j4 Z8 x9 U5 U
9 @ x P( c4 ^ {4 J8 fwith plt.xkcd():
$ `- x" _) l4 }2 V$ S. y4 y* B! r( c from string import ascii_letters
# G4 v6 \3 o* |3 X! g plt.figure(dpi=150)
m+ d2 }, {) H( j patches, texts, autotexts = plt.pie(
. J/ n: C$ G$ y! { x=range(1, 12),. y1 P+ ^% a$ i+ o
labels=list(ascii_letters[26:])[0:11],
" \1 `) L% J- X7 M7 f+ H8 A- ] colors=[
" y) U, }) s9 k; l! i F3 M '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
! n6 Z4 f" R$ q6 e, ?3 L '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
2 j' A! {1 V% k! W$ v; @ ],
' F; J3 D- }* C& v* D3 V autopct='%.2f%%',2 r) O" S/ h0 J8 d e7 r
)
, Z0 g- B! V' R x. ~# @ plt.legend(
+ r7 s1 G q4 v$ R( m patches,
- q q" w$ U6 m5 \* Q- j5 A list(ascii_letters[26:])[0:11], #添加图例
4 ]- [7 ?- }' V title="Pie Learning",1 k5 U( {- x. V
loc="center left",
9 n7 G m! B- W- q ` bbox_to_anchor=(1, 0, 0.5, 1),' S# C7 y: U$ n8 O& F# y. h+ O
ncol=2, #控制图例中按照两列显示,默认为一列显示,
: x$ m' v! v( ^ A )# `7 z' X) a( y7 s8 g' V9 n/ \
- J* F. G s9 k9 T! H8 P
/ P0 L0 D/ `5 _1 d% ^; ^, w* p+ T7 e- F2 r& X1 T
" c# }# ^8 b2 x2 m" M0 \
import matplotlib.pyplot as plt/ ~$ ~' s% ^' S
import numpy as np
% q1 W2 C! H- d) G" h$ Zwith plt.xkcd():
; t! b D% H j: t. Z6 W t- B plt.figure(dpi=150): I( ^& r: ?) n- q$ u
labels = ['Jack', 'Rose', 'Jimmy']& }# U8 [! E9 v9 _" Y
year_2019 = np.arange(1, 4)
( {- N& e6 |* f1 b! U1 h year_2020 = np.arange(1, 4) + 1
& T( G( G' X$ G' H! \( M bar_width = 0.4# x8 ~" K2 X* |% P" ]
# X. o+ L X r' r) g3 d9 Q plt.bar(
+ h( R3 ?. f% o, v9 c) F np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
* `& C, ~+ {9 ?. y6 W; S4 d year_2019,* r8 \* Z4 d- v8 x. X
color='#dc2624',
6 C8 z# g5 r. g8 |5 {2 N width=bar_width,
, n* b$ e9 V/ y- L/ e label='year_2019' #图例
4 ^+ v7 ` F+ z! ?4 m. [9 V )) ~: O- L; c7 s8 h0 G% F$ u; G; t
plt.bar(
$ m- W9 g1 }8 n7 \- h! h7 b np.arange(len(labels)) + bar_width / 2,
1 u; F0 t: a* D7 S year_2020," w4 c c$ d4 d2 q5 n
color='#45a0a2',
1 H0 m4 t) h( {7 S width=bar_width,
: n2 f" O7 l7 ]/ S. @ e label='year_2020' #图例 y: \' N7 l1 e8 v( A( T, d* [/ h3 l4 C- s
)
2 B) Y! M( B& Z plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称+ V }9 {* x5 w$ O, P% }4 E+ i4 _" x' N
plt.legend(loc=2) #图例在左边$ ^+ ]9 o- B4 e/ C7 ]) N+ `4 K& [
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 % z# f# O# r: M- K
5 a, s' }' }8 N5 _) ^ A6 z' l& J6 a# M+ f) s" x
( l) p6 B2 P4 L/ m( P/ j# P
- }2 q h4 R+ B
6 F: K8 x/ t& X' ~8 L4 s9 X$ F* C7 `" \' ]- q+ y
以下参考: Python可视化|matplotlib10-绘制散点图scatter, L* x. C9 C8 r0 W
& L6 Y; X* |/ _) ^6 C
* F8 ?+ ]; ~5 q! t: Y
import matplotlib.pyplot as plt! Y5 W8 X2 T- H, z0 Q. D& Z
import numpy as np
# K9 H/ K! G4 f u' Wimport pandas as pd9 Y) p( d* y! a0 i" J; E
from pandas import Series, DataFrame
4 P4 I. Q: X( B4 I% T#数据准备
* i2 Y- U3 h' B) i Ffrom sklearn import datasets4 [+ ?" h' u5 N0 Y/ o
! _0 \. D2 M! ]! f2 K' Xiris = datasets.load_iris()
$ T9 C; C' i; V2 Tx, y = iris.data, iris.target! i& ]5 `8 X& B$ o* v! e
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
' _2 v* q$ |0 v/ U columns=[
/ s3 X) k- n) Q9 o 'sepal length(cm)', 'sepal width(cm)',( @( O9 d& d! T& q! r" T8 I: u
'petal length(cm)', 'petal width(cm)', 'class', G, ]3 y2 ^$ p; k
])( ]4 q4 B# i+ i6 k9 T% H! S- `$ {
with plt.xkcd():6 w0 V6 m4 `8 D2 e1 W( v
$ E3 M% B0 C- u( Z8 V$ e& c4 y9 D
plt.figure(dpi=150) #设置图的分辨率" W$ Q) }/ j( R7 W! f- H
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图) R- S+ k: o. [9 h
iris_type = pd_iris['class'].unique() #根据class列将点分为三类
* H; h0 F% p6 j iris_name = iris.target_names #获取每一类的名称# D2 r% r0 ]9 \6 C2 X! k# G
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色" ]4 M( Z3 v) j5 W
markers = ['$\clubsuit$', '.', '+'] #三种不同图形
% ^% F8 i, L; l
. ^ {/ Q- {. z for i in range(len(iris_type)):
F. M4 @: J3 o; W3 { plt.scatter(
9 n+ Z* A/ I6 h pd_iris.loc[pd_iris['class'] == iris_type,
4 |% d- a6 j- J. U0 |# f' F 'sepal length(cm)'], #传入数据x
: y+ m( M6 q2 P' J pd_iris.loc[pd_iris['class'] == iris_type, j- F8 y, @5 G
'sepal width(cm)'], #传入数据y
( m; R A* V$ W, w* W s=50, #散点图形(marker)的大小
3 `" N# T% ]! y/ \; D; L8 T c=colors, #marker颜色0 ^9 r: m. t& L. Z& i
marker=markers, #marker形状2 w% o+ N9 F7 H& C) H S/ ~5 c
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充; k. A. e. a* I8 g7 V* n
alpha=0.8, #marker透明度,范围为0-1
% H& N8 P9 P- f* L( q( G* m facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c4 c. D, L/ E N7 y' n( R1 G4 r2 @4 y
edgecolors='none', #marker的边缘线色5 C9 P- J" E, m' |' ^* |, `
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用, V5 l$ y2 \! t9 B
label=iris_name) #后面图例的名称取自label
: v& Q9 ]) H& L s' Z _9 l$ W0 b3 ~8 E0 B p
plt.legend(loc='upper right')
: o o9 t1 M9 T9 v7 c3 s3 E. c: [) C, H( J1 f/ K
6 @- y0 m Z' h( P8 q
————————————————
- {' t4 X9 _! k" ~( r8 e' E版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
( |' y9 q1 w/ @9 Y4 [$ v原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
1 c" }4 Z( ~4 a- J, h+ Z. S- w% ^
$ B4 L% B! n# a6 o& |4 l" e# Y0 q6 w" I
|
zan
|