- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563369 点
- 威望
- 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年大象老师国赛优 |
" h2 _ h: x' t+ {+ i. L9 k一行Python代码有多强,可让图形秒变「手绘风」
3 @3 F, j( R& o( x) N/ l( h, l% K) U之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具: V/ u* g+ c$ [' r& z0 r q
8 B* r/ g- @: h5 q
, \2 W9 \7 U, l3 g( a# X4 E+ u但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
! c1 u/ l" y, W9 y0 \ v3 L) a6 ~
, H# c4 J" T0 _& ~& F+ |" A9 Y1 }' ?' X+ X' C* a5 n! |
matplotlib.pyplot.xkcd()简介. K- N8 O$ a5 X% ]2 H5 v
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小
* v9 H3 r3 [2 o$ F" s+ F; `% s0 o" D7 r
& [, K3 d+ a ]6 |, f* U3 c# D
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度' R- D% i# p7 ^( G$ y; M; X
length=100, #褶皱长度7 {0 j- [7 M/ a& x- ^
randomness=2#褶皱的随机性
! J5 w; y% K% q# W7 A V )% k& D' x7 Q) _: _* ]9 `* c
matplotlib.pyplot.xkcd()使用
- X$ P$ `9 f0 U# _$ g如下,加with行代码即可,括号中参数按个人喜好决定是否设置~, \6 I, J) i" }7 E
+ Z+ f+ w' l" b ?( Q2 s. i' A4 h2 T" U; D
with plt.xkcd(scale=1, length=100, randomness=2):3 ]. t" O) [, S: Z" B
#with是临时使用一下,不影响其它图使用正常样式
5 z. }5 r2 d8 Z. p: u& F 绘图代码
9 r6 |3 h1 O/ G) |% B- B 。。。。。。
( Q) C9 _. J9 {- Y7 J plt.show()
5 @" |- K* l" h% d: e% gmatplotlib.pyplot.xkcd()使用实例
- ?, j& H6 k) s' J- o! s+ t& K0 a下面代码为pythonic生物人公众号之前的文章代码% V+ U/ T9 O6 D" X9 r }, O) Y
B7 [* _9 _+ ?- L; b6 G) R7 F' m# B/ y, J% U
以下参考:Python可视化25|seaborn绘制矩阵图
~& e+ d: l; o% v8 e/ Y; {, E; i* E0 Y: d" ~
- q' q7 [/ y% C$ Y: o#支持seaborn% q/ x$ i* }8 A4 y& h2 \
import seaborn as sns! R$ R+ B0 V: e6 k
iris_sns = sns.load_dataset("iris")
: b/ a; ?9 }. R! ]with plt.xkcd():7 \" D; d5 w2 |
g = sns.pairplot(8 Q7 I3 Q9 C8 y$ Y5 h
iris_sns,+ v* [8 M9 F: l4 Y3 i( V$ M' I
hue='species', #按照三种花分类
i" o" e' I0 Y( V! r/ G" Y palette=['#dc2624', '#2b4750', '#45a0a2'])
9 ?; q2 t! q& s6 u) P sns.set(style='whitegrid')6 R ]" Z5 ~' D u0 A7 P
g.fig.set_size_inches(12, 12), C5 o/ U8 u* }+ x! A. Z
sns.set(style='whitegrid', font_scale=1.5)" d, r* b0 E2 g _$ j
; a7 g3 s1 ^, J, N; Q0 J U8 O
# S+ `/ c% k- e6 l% Y5 N
* C: i3 s d4 _7 x' [以下参考:Python可视化29|matplotlib-饼图(pie)
8 B% ?; {2 ]% r# [- _5 ?. t: X$ Z1 K+ V: e
% Y$ W1 K2 b$ N% U' Q: |import matplotlib.pyplot as plt
, @, v' D4 c/ C7 _4 W5 k' E4 qwith plt.xkcd(
^/ C; y% s- K scale=4, #相对于不使用xkcd的风格图,褶皱的幅度8 K$ i. R& }/ P# O8 R# D8 B6 F( ?
length=120, #褶皱长度
& X3 l: J$ a- I+ V" F/ S, X! r. ] randomness=2): #褶皱的随机性: Y5 |2 @( E0 q+ t5 E4 o g
plt.figure(dpi=150)
5 T4 U- @4 R" x, H patches, texts, autotexts = plt.pie(
0 U4 {# |- L- {! o, v3 s6 ?5 d x=[1, 2, 3], #返回三个对象6 ^5 o' }) a! R
labels=['A', 'B', 'C'],
1 H, X0 h4 U) |& [- s+ O5 |& ~ colors=['#dc2624', '#2b4750', '#45a0a2'],
% W$ s, \6 F1 D autopct='%.2f%%',
2 _4 V9 d4 u+ ?3 O* V explode=(0.1, 0, 0))
# W! e+ U& ^" j$ U, M6 w" i4 D texts[1].set_size('20') #修改B的大小
( J; a. t! L" b* B) v % ?; n5 O) O" C7 j
#matplotlib.patches.Wedge
7 ]' `& R# r7 v4 _ patches[0].set_alpha(0.3) #A组分设置透明度
" T- S m1 ]" ]* i6 \7 [0 z patches[2].set_hatch('|') #C组分添加网格线) _0 k* z6 N' l# m) W; x
patches[1].set_hatch('x')2 V, o( v j/ E, ^ d0 x& x/ Q& l
* c7 S$ a6 ^' B9 Z
plt.legend(
; c8 u0 W4 a* i4 s patches,2 k5 W: F Q" t6 q3 [$ @1 w
['A', 'B', 'C'], #添加图例! a! v9 G% ?7 g3 U
title="Pie Learning",
" p. n. B1 b( |# G1 i loc="center left",, F6 ~& W+ c7 w! J: {
fontsize=15,4 d v5 K5 @' R. n. S0 t; F
bbox_to_anchor=(1, 0, 0.5, 1))/ v- W' t1 M+ G2 B4 f9 [
& e0 Y! |$ f' a4 ~ plt.title('Lovely pie', size=20)
/ Z( M' d8 b: }# o/ I+ Q+ I plt.show()1 P4 h5 @' x4 w2 [; Q4 r
( a- K' J9 F# z" p. ]0 w: m! U: n
: t9 B- _; u7 y0 Z7 i
' }% c3 V x% v: H$ c
$ X4 f3 f' w" R, [* ?" |- w1 V$ d3 m nwith plt.xkcd():' l( t& F8 y7 V$ V
from string import ascii_letters6 u x; S# g1 i* z$ U# q
plt.figure(dpi=150)1 i/ E0 a0 v: ^+ u( p. }
patches, texts, autotexts = plt.pie(
9 A8 }, ^4 p" o, O0 u# ^ x=range(1, 12),
9 Q! U* ^* j" S; y; S# u! N+ t labels=list(ascii_letters[26:])[0:11],
' ?" y. w* |' N# ~( K colors=[+ T* u6 L o/ d* _) i' N
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',) w% f8 Y Y+ H# ~
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'* W& h4 U B/ C% c( F: n' T+ O& Q
],* }3 l1 Z( A. i, S/ O( b# o
autopct='%.2f%%',
- V% L) G8 R- j# K8 C/ Z )
/ L3 o& H) N+ R5 I) Q! E+ ?7 ^6 C plt.legend(& I; A. C" @3 v+ g# i8 [0 f
patches,
/ r* b* n) S. W/ E W! F5 Z* h list(ascii_letters[26:])[0:11], #添加图例# P& p2 s1 S4 I& a/ z
title="Pie Learning",, w+ \ X0 y: F% [5 _8 p
loc="center left",& \3 y2 m4 N: ~% Y& s
bbox_to_anchor=(1, 0, 0.5, 1),7 w2 P6 z( o" a
ncol=2, #控制图例中按照两列显示,默认为一列显示,
# V2 C1 m& U0 I$ j2 A* G _ )5 c7 I8 f3 v O' }% {2 S
: m+ M/ T6 W0 p, d% t
& A" Z. q6 E7 }& [( z9 E
+ a, N+ \& Q# Q: k8 ?2 d# ?. t- K$ H) O s; ]. o8 K
import matplotlib.pyplot as plt
. J/ U- O* s6 @" J* Y; l4 himport numpy as np( P/ I7 C5 Q9 Z0 R2 ?
with plt.xkcd():1 q. n" ^8 U8 H( C/ }, |8 w
plt.figure(dpi=150)
. c% h! V/ z* M& \% h labels = ['Jack', 'Rose', 'Jimmy']
( r) O6 w5 b r% M# ^ year_2019 = np.arange(1, 4)) I- L+ ?" @4 B6 F- ]3 M
year_2020 = np.arange(1, 4) + 12 E# k5 j W& K
bar_width = 0.4
, j7 V3 y( A; a( y! v! w( @3 |% \
8 Z, S/ f6 s3 C. Z q- k plt.bar() V1 Y. q/ W2 m4 V6 A
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
2 v1 w9 p: K. P6 K5 l( }1 O e Q year_2019,
' m7 r- e3 v8 x. B7 K: p& u! P color='#dc2624',
% Z* e6 g0 j+ D4 _3 f9 H1 l4 r1 e width=bar_width,
+ \8 z. E7 z: [$ [( [ label='year_2019' #图例
% Z1 ~( H" n9 n) x, P )0 @ d( k8 P. n( K: t4 t
plt.bar(
8 U; | W9 s9 f1 ?$ H np.arange(len(labels)) + bar_width / 2,! H7 G7 K |/ ]/ d9 h2 a- R
year_2020,
/ j! V* Y" k& n) L4 B% P color='#45a0a2',
7 l/ o% T% W5 n/ \, q% O width=bar_width,
; z4 L+ ~7 u [. y7 T. b0 e label='year_2020' #图例+ Q& p1 ^2 A! x% M; r
)" N- j# L5 t1 k, l' b' m% X0 h: M
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称6 b( E3 \8 p, U, w" E& [; H: X
plt.legend(loc=2) #图例在左边
8 x( v6 }4 s) I$ l1 V* K以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 . M" P: `9 L: o- q- ^* o. p
1 v W' t3 C# L* B/ K' s# u, I& q+ m, E0 ~$ p8 |( E
& D; ^3 z+ Q8 |% R4 q8 k: s; j4 g
" m0 ]& e' }% R+ i2 ?0 n$ K
$ c2 J8 o& P! S4 l% {2 M8 ]
$ l7 w, J: D# s- x" }. Q
以下参考: Python可视化|matplotlib10-绘制散点图scatter! C8 V4 R ^ K+ f* d
0 f) y* T! D5 {, T" Z' j
8 `! }, f+ \ Q, V9 Y( O/ d) {import matplotlib.pyplot as plt
% ~6 `" v8 s3 F- _$ fimport numpy as np
9 ]4 Q; h9 ]) J; Oimport pandas as pd/ |" m+ ?, @- Q. O* Y
from pandas import Series, DataFrame7 R& q! C5 n$ H: P% Q: l
#数据准备
# f; ]* Z! `7 }# y( x# E! ofrom sklearn import datasets
$ Y1 ]3 V7 `0 W R7 n/ a / `% U# L9 `" }
iris = datasets.load_iris()3 {5 q6 Q4 M2 C
x, y = iris.data, iris.target3 G7 k8 O5 a) j" X
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),* U, _# o# H6 ?7 T
columns=[
; Q3 [; i) O, ]% Q 'sepal length(cm)', 'sepal width(cm)',
: i' n! X8 P, [6 K8 a 'petal length(cm)', 'petal width(cm)', 'class'1 @# G5 w5 H: Z
])
' p: H; D: M# P( O. Z& l6 U0 rwith plt.xkcd():
) ~9 x# K6 U3 c" l; ?, @) @" F+ b " I, u6 S6 ~8 h$ P4 L" n
plt.figure(dpi=150) #设置图的分辨率
: ~7 f. N# e! N8 D2 Z0 e6 g #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图9 |4 N& z: T8 ]/ j% T& |/ Y
iris_type = pd_iris['class'].unique() #根据class列将点分为三类* j7 s0 z9 q7 \# ` s M2 f3 `
iris_name = iris.target_names #获取每一类的名称: y {* f& k, P- n8 i
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色* K* W# I: g* o3 h
markers = ['$\clubsuit$', '.', '+'] #三种不同图形
y7 S( ?* e- u7 h+ z8 ]! Z6 H l# l: A) T5 A" Y' ?
for i in range(len(iris_type)): L3 J9 H4 }* U: @
plt.scatter(
+ t4 W2 l$ K( e9 M z7 ]. P pd_iris.loc[pd_iris['class'] == iris_type,
: z6 l5 A2 A$ [0 A r8 B 'sepal length(cm)'], #传入数据x
% A! j0 p ^% l' P" y- r) | pd_iris.loc[pd_iris['class'] == iris_type,' Q1 A' ?: j0 i9 A* [
'sepal width(cm)'], #传入数据y
1 s$ T; N' z+ [/ M v) O/ m% }: ? s=50, #散点图形(marker)的大小3 Z( ]% ?6 |' H) G3 e4 y2 T, \
c=colors, #marker颜色
$ i2 f7 y* q. _' b: K% V marker=markers, #marker形状2 b8 C1 G' x! K6 r- s r
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充6 h L. L$ y4 p9 L# P8 n! W
alpha=0.8, #marker透明度,范围为0-1/ [7 U3 ~- B2 B# L8 @- M% ?
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c( ]! ?, |+ U' N9 Z
edgecolors='none', #marker的边缘线色8 T5 ?* R* L F% {
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
7 W- I. B" m! B# r1 b label=iris_name) #后面图例的名称取自label, J3 U, V% b% V' x/ w
; }: ?+ K, F2 Z plt.legend(loc='upper right')
8 |8 |2 _; \! o% Q+ H) D+ x1 o+ b, @0 H" C( f
1 p2 m, c9 G4 d6 i; }% \4 M
————————————————2 r: S! X9 C( q( h$ m. y5 d
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 R* X1 A9 I/ t8 W; J" _- }
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753% Q5 P" j3 E3 j& u% {
0 K A8 s( K/ |
; Y# ?$ x: O9 M5 I: h, a0 N |
zan
|