- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564561 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174591
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
& ~5 t9 L7 e6 r8 W2 ?) E1 O一行Python代码有多强,可让图形秒变「手绘风」
- I% x) V- u- s+ j" o( ?( ]6 l之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
7 }: w, t1 F. U( |' ~. w) l5 ?
( k6 n# T5 ]/ p4 a1 R2 g* S+ {
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
( [) g- d/ c/ a, q( L) q
: [" q0 D. t1 w% c+ G' k2 L9 \4 d2 H! \% d+ V
matplotlib.pyplot.xkcd()简介
& c9 |& | R* X2 J5 U7 Y! E这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小# `% x0 M& q6 q, W. @
/ Z! F) b* [( i4 I, \9 u8 s
! M, Y/ T, r6 L
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
! i4 a, a8 c: [) f8 [& j$ j, W length=100, #褶皱长度( Q# E1 c& R! S- k8 @
randomness=2#褶皱的随机性# ?; A9 W: ~: d
)
$ h- L& n$ G+ v& b5 X/ `% x' z: s8 hmatplotlib.pyplot.xkcd()使用* T: r! |& e9 ~! w! I. L. Q! y
如下,加with行代码即可,括号中参数按个人喜好决定是否设置~6 x' S7 z8 ^+ u; c8 v( _" a
$ ~5 L1 D1 q$ W+ j$ {4 |3 m2 {) g
0 W# Q/ \0 N& o& iwith plt.xkcd(scale=1, length=100, randomness=2):6 e; y" W [) M/ h% y6 L
#with是临时使用一下,不影响其它图使用正常样式
( R/ |& O) \) |5 L0 W 绘图代码
J% d- G# F" g; n 。。。。。。# q/ @7 Z. B8 d( G1 V" F3 h
plt.show()4 R$ M, {! T8 j/ A4 a
matplotlib.pyplot.xkcd()使用实例 / R# k: |- t7 o: k% ^
下面代码为pythonic生物人公众号之前的文章代码+ ]$ l+ }; i4 L L) b2 f* R7 l, N
; F3 I8 }' L7 D9 j. P4 q w3 f# I; r9 g5 b
以下参考:Python可视化25|seaborn绘制矩阵图
4 T) i4 b7 j3 L7 s& M. {) ^/ W
# t3 h0 U k+ h' `7 c) U) V- a
# ~" S1 A, B! {' i#支持seaborn& r2 A+ e2 g& B
import seaborn as sns
! o# z8 H( o. j3 y8 C1 Xiris_sns = sns.load_dataset("iris")
+ E8 P1 U5 ]/ P; M- ?with plt.xkcd():
- \8 {9 ?$ J* j' x9 p" C5 y5 q( \ g = sns.pairplot(: l& _0 A6 g1 Z7 t# D" [
iris_sns,2 k6 s Z$ }* W! w# l6 \
hue='species', #按照三种花分类
' d5 [2 Z* _5 i2 F7 Q/ o6 Z# c palette=['#dc2624', '#2b4750', '#45a0a2'])
- q4 C" z. s7 r' Z* k/ | sns.set(style='whitegrid')* m$ r. j. H! Y: n- g! \
g.fig.set_size_inches(12, 12)
+ D& B: q- `0 Y" v' [ sns.set(style='whitegrid', font_scale=1.5)
* B, S# l7 U3 z* [6 B% U2 { 7 \, r( n/ s3 k" w) y
$ `% x2 s' p8 i: e
" l3 y9 K1 Q' q0 I- p以下参考:Python可视化29|matplotlib-饼图(pie)
) R, u' @8 g- z" V
0 Y4 i& h% L! X! z+ i' u( u2 I/ ~8 A1 h E: W
import matplotlib.pyplot as plt5 b( J+ O/ g ]( M4 i
with plt.xkcd() j6 S7 W G. ?. u
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
, ?: S* Q. U/ E& p length=120, #褶皱长度
4 K" ]% q+ n0 y7 k0 F1 {. n randomness=2): #褶皱的随机性
: U* _# w+ W# g( |8 H plt.figure(dpi=150)' N/ M4 w* v. n8 N+ k
patches, texts, autotexts = plt.pie(
5 J9 `" b+ ]- P- i7 L, E x=[1, 2, 3], #返回三个对象
, o0 T; f$ X/ _' W# u6 } labels=['A', 'B', 'C'],
8 S. A. o( K M) I6 R. e) Z colors=['#dc2624', '#2b4750', '#45a0a2']," b: C) A% S2 j& H+ a$ S; A
autopct='%.2f%%',
7 n! Y: A3 g' U2 k% @ explode=(0.1, 0, 0))
/ i% A E* g+ {5 ?' U. l texts[1].set_size('20') #修改B的大小* L$ G" [/ H/ x! X
# [& K) S6 K" n/ Y% y1 m, I9 f* t# m #matplotlib.patches.Wedge
( W! d4 S" f2 L b patches[0].set_alpha(0.3) #A组分设置透明度0 [& H2 z, z9 h, g& r
patches[2].set_hatch('|') #C组分添加网格线
4 [$ r% y( N+ v) W patches[1].set_hatch('x')$ c5 N; U y3 i& w
4 N, M) |- I- r* z+ c% y3 g. \# Y
plt.legend(% W! j& o* @8 w3 y) _& L
patches,8 P5 ^( B3 s4 e5 r" V) f7 _% ^, f
['A', 'B', 'C'], #添加图例2 l5 P( j* e: j/ w( y. M
title="Pie Learning",
+ f/ `1 q/ f3 s$ Y* m loc="center left",
2 ^! f3 ^ F& c3 I1 T! M fontsize=15,
- k! C, i4 R7 O8 I/ | bbox_to_anchor=(1, 0, 0.5, 1))7 K$ v+ c" X8 \. d7 B4 B
; Q/ e2 q& Y& Z# k% Q# m" K
plt.title('Lovely pie', size=20)
# q5 \2 o% n. e1 h8 v plt.show()3 \+ L2 q; C0 T
0 _6 }, e) w4 r G8 |3 W7 L0 I" @3 \4 a1 P, ~
& Q) N) U4 S) o" _3 n9 W6 r( F% O7 Z9 l7 j2 i* M/ h2 m
with plt.xkcd():" _+ H1 `1 J8 Q' j7 a
from string import ascii_letters K6 V! D# p) o2 ]7 N: E+ K& E
plt.figure(dpi=150)- X* G- ?5 ^+ ^7 M+ H8 ~3 }, J
patches, texts, autotexts = plt.pie(6 k. c# S, A: ^% D
x=range(1, 12),; b7 P0 d# j- L8 N; J3 @
labels=list(ascii_letters[26:])[0:11],
1 s" Q" x6 E" {7 O2 ? colors=[+ l4 z$ u. H y1 g1 ^5 I) @
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',9 n b% O" h) {% J+ }& p
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
?3 M6 f3 | s! u" o$ E ],
2 O' ^ i" h: p4 E- [1 _ autopct='%.2f%%',
- e1 B! ^! p: @9 r" h8 V' H )
4 @+ Z/ W- [ E$ ^( p plt.legend(
" l2 k+ k; z" _8 b7 Y( Z patches,; Q& ^$ i3 g# S. Q* P0 |
list(ascii_letters[26:])[0:11], #添加图例
1 }' P. A3 [5 Q9 F title="Pie Learning",! Q" U o M5 u% D
loc="center left",
, f1 m/ L, x: w8 @ bbox_to_anchor=(1, 0, 0.5, 1),
3 G0 ~' q$ g2 e' b/ |" @. w ncol=2, #控制图例中按照两列显示,默认为一列显示,
1 I w$ {7 }/ y6 p" X8 f) R7 @! Q )# r) [4 K- \/ N/ m: R, J" O- g0 b- [
+ D, {+ X& L& H7 p: G* m
* B; J+ ~3 Q* u
8 a* t1 M( J9 s0 v! ]" x
( G* B; e7 X8 w! c# e! fimport matplotlib.pyplot as plt7 w& t4 W p- {2 A
import numpy as np
8 I! f j: p/ S% _1 d. Kwith plt.xkcd():
# g+ H; J* [, ^5 U6 P plt.figure(dpi=150)
5 I i- r$ g# C+ U$ a- ^ labels = ['Jack', 'Rose', 'Jimmy']
/ V7 J v, r& \7 h0 B. i& g2 ~; i0 T year_2019 = np.arange(1, 4)
- k" `; y2 J9 C- a year_2020 = np.arange(1, 4) + 1# u$ q! z8 [3 r# v' H
bar_width = 0.4
- l6 k+ j- k' ^! a$ q0 Y . i- y9 `+ v( y9 n8 {
plt.bar(
9 N$ j" w# Z" u' G% R6 y* u np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽. H, o& H7 U% e1 e/ T2 t9 M- p
year_2019,$ Z+ G2 ~9 S ^" N2 d i* n
color='#dc2624',( i' K& e0 i, M1 q" f4 l
width=bar_width,
, I, w2 H' v' {3 a label='year_2019' #图例
: f( v$ N ?" [ )/ c5 l; Y& y$ S' P, R
plt.bar(7 D, o/ g7 n+ |/ [
np.arange(len(labels)) + bar_width / 2,
& i* d9 Z+ ?3 z1 ~6 ~; w2 y3 X6 M1 C year_2020,
; V! i. g. |: ^ K- V1 ~3 I color='#45a0a2',$ l, Z. O4 {: P; ~+ w
width=bar_width,
) Q; K8 e6 ~$ S* P. E& D label='year_2020' #图例
+ Y# i" f O7 ^8 k0 N { )" z8 u% H- I6 n, s) N- c
plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称 ~( l4 G1 _$ `6 ~6 M8 t; i1 Y
plt.legend(loc=2) #图例在左边1 S/ O3 t0 M- ]( W2 ?# b
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
- M- O# J9 B. c$ E: c- A! W
3 ^- Q* u( F5 |# p# r3 H7 `) D; }8 ]7 W
( U/ u- M+ w$ j* \
9 Y1 n$ |$ V% m& F# P
; Q! @( }/ @3 |$ ]% Y0 z0 T, g
& ~+ d3 v& P$ m7 D# b1 D
以下参考: Python可视化|matplotlib10-绘制散点图scatter& k2 J" Y3 o# R5 q8 `
7 o! b% y& W( h, l$ e F& D
A) N' }5 ]- _+ ?
import matplotlib.pyplot as plt
3 b4 ^8 p, z) j+ a3 ?import numpy as np q2 i% t7 X( O& h8 ]) Z+ |
import pandas as pd4 \/ {7 a8 Q0 B4 M
from pandas import Series, DataFrame: }2 |8 q# R7 X b$ `
#数据准备+ x0 m' E5 k( @+ ^* ]3 b9 O9 S
from sklearn import datasets' Z4 U1 z$ Y0 B9 Y
0 {3 A, s: g+ s. g
iris = datasets.load_iris()
, b" D2 K; i/ `$ s# s2 C( u8 Ax, y = iris.data, iris.target
$ `& X% A' a# b; Tpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
( r1 Y- T5 N" }1 ` F+ M" b columns=[
$ N4 {5 W p7 G 'sepal length(cm)', 'sepal width(cm)',
/ ^' A8 K, T0 g+ O& z5 q 'petal length(cm)', 'petal width(cm)', 'class'+ X: y+ v) w" s6 D
])* G: e8 W6 u7 ^5 a. A, H
with plt.xkcd():: e* B2 u+ I7 u# ^0 m$ E2 Y
/ E6 _% N6 _+ R4 ?0 M plt.figure(dpi=150) #设置图的分辨率
0 L* ?5 L6 d: v [9 J2 W% s #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
9 v5 C$ d. C5 S8 g+ u* l iris_type = pd_iris['class'].unique() #根据class列将点分为三类
& ~3 O1 {8 i( B" \ iris_name = iris.target_names #获取每一类的名称) b5 P( E( S9 J' r4 A" h
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色' S( Y3 y4 i! w9 S
markers = ['$\clubsuit$', '.', '+'] #三种不同图形2 v ~( I) _! W* }/ D4 f* e3 ]+ B
; ?# W4 J# [6 F/ `, X- C
for i in range(len(iris_type)):
% H9 d' Z' |% O& N plt.scatter(
; U0 @5 n+ d! T% D. _ pd_iris.loc[pd_iris['class'] == iris_type,# V0 T/ _, B/ @. Y9 M9 G
'sepal length(cm)'], #传入数据x; D2 `- g0 S! ^( j2 X$ \# A
pd_iris.loc[pd_iris['class'] == iris_type,
; f$ F% Q3 g- J. p. k: \ 'sepal width(cm)'], #传入数据y
+ Y6 v5 b7 I( z s=50, #散点图形(marker)的大小; \+ {/ o- c# ?/ U/ r6 y3 l' E
c=colors, #marker颜色
! D4 E( d4 W7 r4 Y marker=markers, #marker形状( b" W( ^ z* g8 x7 C% {! l
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
9 n- J3 D3 z3 d. O% { alpha=0.8, #marker透明度,范围为0-1
% U s! a7 D% [6 Q, ` facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
+ m8 s3 e; M7 B' o6 n, |2 q edgecolors='none', #marker的边缘线色7 i" c" b% ?! e3 T2 x4 i4 M
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
' Y! L/ L) q1 r label=iris_name) #后面图例的名称取自label Q; k) V/ `5 J. N1 |& Q
! p9 l* B [* \1 h4 H, N0 U- _- y0 R" s plt.legend(loc='upper right')$ U2 u8 h" {8 t- ^1 b e
9 \5 T% p* e X( L; X- A: I' m6 R5 _% {' q( W
————————————————. V. f+ s- O1 W+ _% s I$ ?2 K
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。1 v$ b. T, n5 m$ [
原文链接:https://blog.csdn.net/qq_21478261/article/details/1189637532 x' q/ {5 c' R2 f
5 m& E% m K8 E: m1 n1 A
# v7 C0 r+ u& Q |
zan
|