- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566428 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175151
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
. _. p0 X0 d X5 A3 c3 l一行Python代码有多强,可让图形秒变「手绘风」
& R4 B* y& ^+ c, E2 _0 U6 U2 Q之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
/ L3 x7 W; H9 y" H6 N5 W( ^1 E# c* c& U( J1 X. I/ Z# D; m
+ V: ?; ~+ H! N" l& X6 X& ~
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
* S. @5 U" E- U7 V6 x2 _
^1 I) Q: ]4 @7 r- S0 ]8 x* |+ U6 o
( i8 r# g2 o2 ?, _( Q& ?* f0 a7 smatplotlib.pyplot.xkcd()简介
! l* n* n- c! V6 X这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小$ @ B9 W I2 h" f% d
# N7 G% V# K% P( W' v1 T+ t( I- x
1 L' c0 ?/ Q, K0 ?' ^3 B' m) rmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
0 S ^) I$ V& }$ _2 b7 e8 M length=100, #褶皱长度" b. y7 R/ d, t2 x5 a |3 p
randomness=2#褶皱的随机性
) `; @; p* C1 r- J' x$ b )
% G% v: V6 I1 M, h4 Dmatplotlib.pyplot.xkcd()使用
# P& g0 @6 O4 W) g) B- W如下,加with行代码即可,括号中参数按个人喜好决定是否设置~2 v* }: K1 v: i, O/ w6 t- j
S( x; `4 p: X. G
+ A. s" C% g& P9 {with plt.xkcd(scale=1, length=100, randomness=2):3 v) h8 c/ X `& w# P# M+ ~
#with是临时使用一下,不影响其它图使用正常样式
; C0 d9 c2 I9 l3 W5 T 绘图代码. B. B; F' d8 N: E
。。。。。。, n0 W" K" ^7 h% x P
plt.show()
6 x8 N7 A4 l4 u$ q8 \8 s! _matplotlib.pyplot.xkcd()使用实例 & z6 `- _' U$ f( I8 m5 L* k
下面代码为pythonic生物人公众号之前的文章代码) n# l5 N' {9 b) o# q
0 c' t" Z3 j. r9 Q8 ]/ q$ J* S' X: j+ z! V
以下参考:Python可视化25|seaborn绘制矩阵图
7 M) Y4 {8 |+ X
0 P0 a$ W m* ?# s' |
* \0 F& _. x/ `: C) M#支持seaborn! D1 W4 {& g' K. @0 L1 E) H
import seaborn as sns+ H! }+ X8 H$ |, w
iris_sns = sns.load_dataset("iris")
! d* C/ Y8 D" Y5 Mwith plt.xkcd():* D$ {+ F9 J3 e' g- F- F( h
g = sns.pairplot(5 w) ~6 K& C1 y0 y. U+ T
iris_sns,
: X& S7 x& o/ Y3 Q3 _ hue='species', #按照三种花分类# `" @3 p5 C% k& R& y, Q
palette=['#dc2624', '#2b4750', '#45a0a2'])
3 O- v) s e D+ R sns.set(style='whitegrid')0 W& [( Q. L! y; s
g.fig.set_size_inches(12, 12)
/ o6 Z4 T( _. \$ P. d8 u1 X sns.set(style='whitegrid', font_scale=1.5)0 N9 g4 |" \0 u" U
* T! L, U) c; r" h2 j' f+ q% H
+ |9 m! u; ]$ V% w$ |8 C# v& Y# r* |# p! h
以下参考:Python可视化29|matplotlib-饼图(pie) 1 s- K) T+ a! c' L" J
" C. `( |, T, D M) y
0 t( C' A% {, P: v+ simport matplotlib.pyplot as plt
# D9 t+ d1 c* t+ T! ^% p0 C) {( mwith plt.xkcd(
$ e3 U# m+ Z* k6 @ o" K7 @6 s scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
# P9 u! P7 x% O6 P length=120, #褶皱长度5 V& P* ^) ?" `' n- b
randomness=2): #褶皱的随机性
; m, M! g9 f. A4 ^. m plt.figure(dpi=150)
# ?- {* @% L1 W, D patches, texts, autotexts = plt.pie(
2 P4 y+ @ a" `# |& F2 ~ p; t. p x=[1, 2, 3], #返回三个对象
# s: s. t! h' ` labels=['A', 'B', 'C'],
! T) q: `$ n- |2 f# L5 e; M colors=['#dc2624', '#2b4750', '#45a0a2'],
2 _4 e! f6 E7 [6 O autopct='%.2f%%',6 c+ Q3 J- [' A$ z5 S
explode=(0.1, 0, 0))
. M3 t) Q$ z3 a" c texts[1].set_size('20') #修改B的大小' D4 P, ]: j% @2 V% H- `# B9 Y' W
! }/ s' G2 P8 ^# E
#matplotlib.patches.Wedge
$ t G6 Z# V- ~1 Q2 K# ]1 j patches[0].set_alpha(0.3) #A组分设置透明度
' ^+ l9 M% x4 E& w! M patches[2].set_hatch('|') #C组分添加网格线0 Y( D7 M. A. c2 m9 m; E7 `: [# d
patches[1].set_hatch('x')) a* d: y. c- [, P( Y: Y
( ^- p- L3 d/ x: W7 b plt.legend() B% y% |& {! d- Q& |- v; ^
patches,$ P% S$ G6 N' A& \, t+ v
['A', 'B', 'C'], #添加图例
* o3 d7 ^9 J/ h. c title="Pie Learning",
! H: m7 p4 I7 a# g loc="center left",
+ e+ O1 ?" N2 q# Q) ]% s fontsize=15," S' m! i4 ]/ _2 Z! V
bbox_to_anchor=(1, 0, 0.5, 1))) f1 N& k8 U+ L* n5 x/ Q8 z; Q' q* o' ?
9 A! h) @+ }' J% i" G' w3 o# u plt.title('Lovely pie', size=20)
2 H1 n5 t) z! H$ m5 a3 l2 w plt.show()
4 V- u/ A" z* P0 p2 F F- l4 x7 e
: _" t8 w1 ?" O# y) x/ [- l( Y; i' Y% s: E+ X
- R, l+ ~5 c/ d4 O7 ^
" W3 N4 A7 s; p& Z5 kwith plt.xkcd():- i8 A, f+ o" d# M; X/ Z; w+ E- C
from string import ascii_letters5 L; z# V2 z. J
plt.figure(dpi=150)
7 ~& s9 g& }: a+ i! t patches, texts, autotexts = plt.pie(7 F& h6 H9 e& A6 a
x=range(1, 12),
2 h- g8 a0 N* r labels=list(ascii_letters[26:])[0:11],6 N4 e7 t9 P+ Q
colors=[
& O- V/ r q" E; s9 A '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',2 F/ h- E. z5 J& \
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
! q5 D" b$ K4 f1 ^4 f ],
0 a8 [( ?2 W' s% S! Z7 ~ autopct='%.2f%%',
0 o6 F* a" @/ X- M/ E )5 P- ?, e* A% i; k1 h4 |
plt.legend(# [, y# D% O9 G7 ~- }! @
patches,
# u* Y% ]' W) I# S- P list(ascii_letters[26:])[0:11], #添加图例" S4 R: r/ }2 l j% X% ~' n/ N7 P
title="Pie Learning",& a$ x5 ?# g& d8 s; ]: T# p
loc="center left",
! ?! `( Q& X1 w4 \: K3 d! q1 A0 k bbox_to_anchor=(1, 0, 0.5, 1),' A, H$ g# M% K1 \
ncol=2, #控制图例中按照两列显示,默认为一列显示,8 y p0 e- `. H3 `* u+ D1 b
)
9 D. M3 D5 q- j6 I# Y2 M. S; ~: N. f) `' l+ e& L2 {8 K
: p0 d8 V% E/ t' J; `+ x O; w$ `8 R s. J6 Y& E
2 ]1 p6 ?! A5 t G; \% C# v
import matplotlib.pyplot as plt
' a, a0 f0 S( ^. Jimport numpy as np
! ?: U9 y3 J7 i/ \. s: ~with plt.xkcd():7 j2 W) l+ _ k# v. [- W( _' Q
plt.figure(dpi=150)
+ q) r O8 L' t0 l( Z labels = ['Jack', 'Rose', 'Jimmy']
) X0 a; X4 I5 P* M* @9 ^ year_2019 = np.arange(1, 4)
- F; T: X* }4 U4 T year_2020 = np.arange(1, 4) + 1
* Z0 ~0 B' v; \- _9 P% c, H. V K. ~1 { bar_width = 0.4
* m0 z" Q; k# m% |6 f
& r1 R; l/ S& \' H% d4 n2 ~' [ plt.bar(
5 j3 r' c V( n( g3 X& A2 T np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
/ e. v% S" _9 G7 f' T' N; K% C year_2019,
0 W/ |7 x4 u9 {4 J) q3 I color='#dc2624',. `/ _, E8 Y4 P8 @
width=bar_width,1 [$ a; z" M1 a* S. G
label='year_2019' #图例, ^: q3 X6 B# @2 i8 @
)( t7 ~7 A" l" d3 a: a
plt.bar(( r9 c' O# j3 W+ S! V4 `! P3 c
np.arange(len(labels)) + bar_width / 2,+ y0 Z1 D6 ^) A
year_2020,
% m4 Q) o* W: N( h color='#45a0a2',
( B/ Z N; d9 {" F) e/ c* S width=bar_width,
5 b* d# S; r) r& D2 k% B label='year_2020' #图例" J' f0 h: ~3 {8 h7 M' f
)
+ B' o/ P5 i; y5 W) R/ g j* L2 P' H plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称* g4 }* D, k# j
plt.legend(loc=2) #图例在左边- z7 X3 ]2 _+ H) |1 f
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 " w7 u& T5 U" V; Q7 J, u
3 r! [( J) g0 o. U0 I+ o; R* d; C6 ~, s
/ k( d d0 g& _ x' g) X
u" T3 `- A7 X9 J# R' G, q. [
# a. E4 x. b v" _1 i+ r
4 H2 g3 B7 z9 s0 [- X" [
* R# R3 i, g0 i" X) `以下参考: Python可视化|matplotlib10-绘制散点图scatter
* ?' J, p7 s* J3 c+ l; h& ~) |
u0 e9 A K% j, P, ~7 R( {7 |8 X2 O, ^
import matplotlib.pyplot as plt
- t J6 z- j6 h& ~import numpy as np
& f: D; S/ Y; a8 U. x' [import pandas as pd
; ~) v; ~* r. y7 l, S; h5 Qfrom pandas import Series, DataFrame
, v% S+ s" e; }% ~8 W2 J8 a#数据准备
+ \- p+ Z3 j: {9 f( }from sklearn import datasets
9 I. M; {, S* q5 X# }% K Z4 `0 r+ R( b
- Y. A/ U: z& M$ E. c' Firis = datasets.load_iris()6 _$ p( y3 ^+ K( u3 p/ H. p
x, y = iris.data, iris.target# |4 ~9 h* _4 ~( O
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
$ @& K- A; Y/ d4 `' ^: ]* O columns=[
1 i% m V) y9 x& T 'sepal length(cm)', 'sepal width(cm)',
4 V# V. ]0 g& p; x 'petal length(cm)', 'petal width(cm)', 'class'0 r4 x! X5 u% y" q: u8 `8 ?& Y
])
2 T: y/ Y& B! B9 awith plt.xkcd():6 S( W" L7 m. y1 Q- u4 |
/ W+ L0 a5 k& }' W$ G
plt.figure(dpi=150) #设置图的分辨率
% H- w4 H3 {: A+ u+ Q, [ #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
( L& v* Y8 {7 ?7 y- v iris_type = pd_iris['class'].unique() #根据class列将点分为三类. _5 }- R$ \, M* m9 R# w
iris_name = iris.target_names #获取每一类的名称' {% G+ O; X" }* i) n' U
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色2 A$ b6 R: B) S/ F0 b/ _9 ]" @2 n
markers = ['$\clubsuit$', '.', '+'] #三种不同图形
* X. M7 {9 W$ b4 p) ~
+ z F7 X9 O- U" u1 ~3 R for i in range(len(iris_type)):& C6 b$ |: F S& N' u; p' D3 x
plt.scatter(, ^8 e* N9 l6 F, m
pd_iris.loc[pd_iris['class'] == iris_type,; o" K% w* L; R4 Y; _- g! H
'sepal length(cm)'], #传入数据x' m6 _2 a$ g. F: F: ~/ Q
pd_iris.loc[pd_iris['class'] == iris_type,
# A; V9 n% S$ ?( C. @" y; A# f+ }$ M 'sepal width(cm)'], #传入数据y
+ F" N5 A; I; m# j" m s=50, #散点图形(marker)的大小6 |$ E) u+ H* ^* w* l
c=colors, #marker颜色
: g- c. l5 f$ E% d marker=markers, #marker形状1 D* w% F0 ~# ^8 e1 D
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
+ r( K0 X( Z5 { alpha=0.8, #marker透明度,范围为0-1# o9 I' r) p/ V( j1 A) P
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
& c. s/ S2 o# X( a0 l. w edgecolors='none', #marker的边缘线色( ^/ I; p7 ~( H$ S6 [8 S
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用. G, u/ ^# u: B: w7 D. {/ _* N k
label=iris_name) #后面图例的名称取自label
6 |) }5 I# M7 [* Z5 C ( k* x, M" r. @4 a: H' t
plt.legend(loc='upper right')! B$ x X% n5 m' ]) j
5 w. l2 N( A+ [) N9 L [' W
/ Q% S& l& B" d" `' c- D2 q, r————————————————
) v' l3 {& |9 Q& N- S2 T% P版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
% |& ^! F8 q$ M3 j5 Q; N原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
$ [7 G% s: i' e$ |1 f7 c
6 N' K& K6 G0 F7 R" w% O5 j- ^
* S. j0 V. K3 K4 n9 }* k5 b2 N. r0 x |
zan
|