- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566430 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175152
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
9 S; d N( F. w0 D$ c
一行Python代码有多强,可让图形秒变「手绘风」
6 r2 l" x) |% [* |) ?6 l之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具! i% ~& n' O; q7 z( o A* U
/ z, \# |. Y5 _
* J+ H: X1 R; Y/ k* U {' p
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
% m Y2 e6 ~- d$ S6 |' w5 R2 Y2 |! t) \! V
$ k9 \, X$ U8 k" G$ g# m7 s
matplotlib.pyplot.xkcd()简介- T* c X, X2 t% J3 J
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
; Y% g/ r) e9 p2 E$ V }5 p7 g. d5 ~9 }
& B# a& W" c! M, y$ ~; c( u# E( U
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度, I& Y" z8 g' B1 h( Z8 T
length=100, #褶皱长度8 W" R$ v2 _( \- t- u
randomness=2#褶皱的随机性: I* r2 y/ }. d- u9 I, p- H
)8 J; Y) }0 i5 C4 {% `$ M8 p
matplotlib.pyplot.xkcd()使用2 z) r. E7 m7 Q8 |$ l# G6 `
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~5 e7 ~6 |# ~4 C0 a. N" {
* e: g2 X$ M* Y4 b5 `# |; S) L: y8 s' F- l/ l
with plt.xkcd(scale=1, length=100, randomness=2):
7 |9 \+ H; g0 J1 v' y7 a2 H, H#with是临时使用一下,不影响其它图使用正常样式. i" ^: |; S% m; N
绘图代码. B: Q1 N4 v& L# F5 w' V
。。。。。。
5 S4 G$ a9 u3 R" w; a plt.show(); ^3 h$ k0 D5 q; e5 ^4 M
matplotlib.pyplot.xkcd()使用实例 ; A3 S( `) ]. ?/ ^' B
下面代码为pythonic生物人公众号之前的文章代码 P( G' H2 F {; @5 ^
9 h8 |( }5 g. P8 { @
# z4 [9 ]% ?9 F* i7 S8 z& q以下参考:Python可视化25|seaborn绘制矩阵图, a; p/ `) T( M" m1 F
( z! w" Z5 y8 o3 B$ P
, S/ ?! N$ x" W. G. H8 B#支持seaborn
% Z5 F2 A! n- Simport seaborn as sns
! t8 w1 F+ [' Q+ I% c/ l$ c; A8 Niris_sns = sns.load_dataset("iris")
$ d: _0 F% O! B; Bwith plt.xkcd():
* b' x' H! k% J/ ]7 ^ g = sns.pairplot(! d- y$ }0 J, j' y! R0 F" d
iris_sns,$ F; R# T$ G& V/ S
hue='species', #按照三种花分类# U: h* n3 x# D
palette=['#dc2624', '#2b4750', '#45a0a2'])
$ M5 G3 T j+ w/ w* @ sns.set(style='whitegrid'). u/ _* E$ L5 X( o' M- i
g.fig.set_size_inches(12, 12)
6 m+ U- [5 ?# A; x$ P sns.set(style='whitegrid', font_scale=1.5)
5 _" x" Y; S5 T( }
6 [3 g5 h1 \, b: f; M9 u; [+ B5 f e8 p
; {& z, H$ F4 v; n
以下参考:Python可视化29|matplotlib-饼图(pie) " G* ]- |( N9 n9 [6 \, ~! X$ K
. d8 u* o( P. I- B! f- w4 Q# J* P- s4 y7 E# ]& ?7 }0 x
import matplotlib.pyplot as plt
X# y& v9 j0 ~$ Pwith plt.xkcd(
. r7 z" ]; l* [3 {. } scale=4, #相对于不使用xkcd的风格图,褶皱的幅度, N0 ?0 H; ]' ]% ]0 p) W
length=120, #褶皱长度
) ]) T% b g" w randomness=2): #褶皱的随机性6 e5 a# e8 l: Y: W: @8 L8 {
plt.figure(dpi=150)
: C% S8 X7 b2 K' p patches, texts, autotexts = plt.pie(7 b* U" H c+ ?! j
x=[1, 2, 3], #返回三个对象/ S6 |; _3 c8 R% ^3 u* ?3 f% P2 k
labels=['A', 'B', 'C'],
- v2 O" Z$ ^6 R colors=['#dc2624', '#2b4750', '#45a0a2'],
7 K5 [/ s! B: a+ Y J autopct='%.2f%%',- M9 c" Z2 d. h7 [
explode=(0.1, 0, 0)) Y% P# [/ E, V7 }7 L, u4 V9 r
texts[1].set_size('20') #修改B的大小
- X: a, E2 c2 {. a
' Y: S1 v7 ^" U! d" p #matplotlib.patches.Wedge
" S+ g! Q: d6 Z; V; ?+ C' D patches[0].set_alpha(0.3) #A组分设置透明度$ @5 f# {' p! r
patches[2].set_hatch('|') #C组分添加网格线. F' X J2 I; c! |3 c$ R
patches[1].set_hatch('x')3 j) B' M+ ^# a$ Z( U4 F+ k l
, Y. t8 s( C% A! b% r4 L# p9 ^- s
plt.legend(
+ R+ N( S- `- @2 w patches,
h \0 y/ ^- w; _; M6 r5 z ['A', 'B', 'C'], #添加图例
* u% I( }! {( s4 x title="Pie Learning",
: Q S! F$ D. V2 i4 f loc="center left",
: q- x% I3 _- ~: C# I fontsize=15,
% p- T4 `& w2 G, h% B1 T bbox_to_anchor=(1, 0, 0.5, 1))3 A) j, |8 ]4 a
% R+ d- F( [3 j0 F4 [
plt.title('Lovely pie', size=20)
: z9 q \; o/ \ o$ D# K. r8 U% U plt.show()1 M. z' l6 v6 S3 @, ^$ T
# S, B- i2 l' r/ Q. K* p6 M8 F# F8 n$ y
: Z8 m0 V) C# ]2 Z3 H
- U0 I4 P' C( H% l0 n4 j
with plt.xkcd():
% A0 @% D4 {0 T7 ?- [0 v/ P0 z: S from string import ascii_letters
, h j* s, ]! P6 ]8 x. G plt.figure(dpi=150)
3 N7 g! Q& p, ], e patches, texts, autotexts = plt.pie(
2 c4 |0 ]& q' R R" K# y x=range(1, 12),2 w3 \8 M/ a+ v# u
labels=list(ascii_letters[26:])[0:11],7 H$ f3 ?1 S5 @- R' k/ _% T
colors=[$ O1 c& o& z5 }4 |5 H
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',0 g' B/ y; s: t4 \1 J$ A
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'8 [1 @: Y, ]' F* B
],- @8 y$ t& p7 }$ [( G/ y+ { d5 q( j
autopct='%.2f%%',! D: Z+ ]$ \! M
)
0 J$ ?7 n/ N: W# w plt.legend(8 |& Z1 `; G% B9 P2 U: |
patches,+ @# @: X5 H1 W! A
list(ascii_letters[26:])[0:11], #添加图例
% m8 v& B8 e* X t* T: _- S" G title="Pie Learning",0 F7 L+ q9 T) u; B$ F' e
loc="center left",
0 V1 C8 a6 |5 M z& R2 F0 L, J bbox_to_anchor=(1, 0, 0.5, 1),
( @- b) b7 ~+ v& o8 ~6 W5 h" }* Q ncol=2, #控制图例中按照两列显示,默认为一列显示,
@5 k9 w5 o1 [# V )
4 J! e2 Y# ]0 I9 R) q; d
! g# z- T9 F9 S, R
( b+ y5 n7 V1 y8 e/ v# ?! t7 v) d& ^" |* @$ O
& j) k6 f3 a: n( M2 J
import matplotlib.pyplot as plt
6 t0 l0 k/ z- N% ~import numpy as np' s+ Z+ B9 L* Q% W+ }. V& c
with plt.xkcd():
. }* Z0 f$ z8 K/ e plt.figure(dpi=150)6 Z- M. S7 H4 n+ j* a: j
labels = ['Jack', 'Rose', 'Jimmy']
' n7 n3 D1 @' O- N% n4 l0 u year_2019 = np.arange(1, 4)' Z% p: H/ R' s( b
year_2020 = np.arange(1, 4) + 1. I# j A; z! f l6 V' M
bar_width = 0.4# F# G$ U; t3 u! M9 d
* e% i+ a! l* o
plt.bar(
' c" T# m) {. W7 Q np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽/ B, k8 {3 u$ ]; b
year_2019,
0 Z5 x/ t: T( `6 X2 u/ { color='#dc2624',. Z$ r" k: O7 u/ Q& V& M
width=bar_width,' z8 Z8 {; t. F$ y8 N( |' ]
label='year_2019' #图例
6 Z( N4 z1 K% c# H! z! L )
5 t: W: j4 G! k: L1 `, R( H plt.bar(
1 G5 {" f8 d9 k np.arange(len(labels)) + bar_width / 2,
: ]# Q9 o* P$ I8 r8 K3 L year_2020,( @- r+ c8 W# r! g; X9 k% R m6 z+ P; j2 V
color='#45a0a2',4 N- } `/ M! U! L
width=bar_width,
4 H7 r( b: @4 |& C label='year_2020' #图例+ c8 N# ~6 e8 m% u; V- c
), B. b6 D7 T+ ~* M
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称
+ q7 `7 S& d5 a, m1 Q! r4 Y plt.legend(loc=2) #图例在左边
% I8 Q- U. x2 q以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 $ K' y! _4 G8 e6 y
; C: s, C& H# `
* ]8 E+ J" t1 Y4 F
6 x4 H: L& X; b: t% {
1 W/ s. e4 C( U/ H
1 o* i$ V7 S V& r% y1 Z" V5 w& ^6 U
以下参考: Python可视化|matplotlib10-绘制散点图scatter
9 i3 S" k9 v; Q6 c) U W2 L' _+ _ \! j
9 ]# E) w- o4 Y9 {6 F5 y5 j. p
import matplotlib.pyplot as plt
+ a# f$ O# `7 r( T Yimport numpy as np
6 n$ o; d |( o0 Kimport pandas as pd
7 n: c4 Q- W) q. q8 |( B8 \from pandas import Series, DataFrame
) f k: d' z9 C#数据准备; _/ r( p, j( j, m ?. ?- }
from sklearn import datasets
8 ]& E7 U; S' f' W 8 t2 u( n8 [( M4 q' G
iris = datasets.load_iris()1 D' t2 S" Z$ J0 l) M" T5 S
x, y = iris.data, iris.target
% z: D' n) x( m; W- Lpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),* I! y. K; w& S2 I
columns=[
4 Y# e5 i& l5 l% J1 x- I F, l8 x V3 u 'sepal length(cm)', 'sepal width(cm)',
; Z0 K4 g8 m# i% V7 W$ @ 'petal length(cm)', 'petal width(cm)', 'class'
4 P/ n# X) d2 d+ T$ F1 K' Q0 E ]). L9 l3 `1 F3 |3 \4 q1 O9 ]
with plt.xkcd():
+ r- y8 I& P& E" C 1 V. P- E m+ F+ [. }6 E2 @3 ^
plt.figure(dpi=150) #设置图的分辨率8 [& p ]6 `! A, O9 @; a$ ?
#plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
/ D# M5 X" p# {% A iris_type = pd_iris['class'].unique() #根据class列将点分为三类
# C+ d, V5 e, K% ?" X% Z iris_name = iris.target_names #获取每一类的名称 s6 Z/ c6 M0 Z, w. [6 ^: d ^# K5 g( f
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
, g! ]. w- v: N) t& _ markers = ['$\clubsuit$', '.', '+'] #三种不同图形
! r/ {! o- A8 \0 x1 n* T3 z3 _ ( r2 V- H5 H% r0 K) C
for i in range(len(iris_type)):6 |3 y% B& }2 V
plt.scatter(# {0 ], v G9 m# u* l; ^
pd_iris.loc[pd_iris['class'] == iris_type,6 `" h# @7 j/ o) b' s" ^" J
'sepal length(cm)'], #传入数据x
1 @) d- N1 j0 u% R: ~- d X pd_iris.loc[pd_iris['class'] == iris_type,3 A- |6 `8 Z3 U* l6 M
'sepal width(cm)'], #传入数据y
3 M' h! t! l) j" d n F9 Y s=50, #散点图形(marker)的大小, Q0 ~2 L3 t N
c=colors, #marker颜色
& @0 O3 ~: u7 x marker=markers, #marker形状- U1 G) T, A, C! V6 `. B+ s
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
6 B6 n$ L$ a$ I alpha=0.8, #marker透明度,范围为0-1
0 x6 h' p5 G1 h+ ?4 F, |$ d. w facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
: d' q" l9 z# y- f& @ edgecolors='none', #marker的边缘线色
* e: |" W N. F9 h6 t6 R" |2 T linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
. {/ o& H! L1 L# s' b2 b7 H label=iris_name) #后面图例的名称取自label
2 L" r" \+ ~& D+ S- D # F& }' {( G7 n, K( ~% M
plt.legend(loc='upper right'): }0 }8 `5 Q- _
7 d {( E8 v$ [. [# d1 b
! f7 B% y1 J$ U2 J————————————————
. X0 b* f& y* O7 e: E$ W" p3 i版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
8 r* ]0 X) Z3 X6 e原文链接:https://blog.csdn.net/qq_21478261/article/details/1189637533 ^2 _* L: D5 b) N, q6 s: p+ M
$ a0 O. u; ?& J$ [/ y2 [
5 K$ O/ @3 y: K9 q3 W
|
zan
|