- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566424 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175150
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
7 G. p: X- o8 W& j' ?
一行Python代码有多强,可让图形秒变「手绘风」
' q/ l3 |9 t C9 q& d, q/ L之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
4 d3 N2 r8 o9 h8 X7 M
3 o: E# x. N! i3 o- ^4 t+ T6 k* d$ g9 Q+ J% q
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。
& Y8 d5 r. d8 v5 Z q w4 b. v& S3 T( [* J" B {
1 R& q R5 |9 z( \* Vmatplotlib.pyplot.xkcd()简介! n _; z4 ~ L; g$ J h$ q' J9 S
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小3 v# |, n8 o) ]5 H7 e. [; v
D# @8 `) G, H* Z/ U+ |
v3 W2 l! J$ L m0 h A
matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度2 q. Y V9 h+ O) `! R1 Q1 M
length=100, #褶皱长度# z% P) E+ T; X0 M
randomness=2#褶皱的随机性2 }, w5 r5 v5 C; J0 r, q, p9 R' g
)" W6 f5 Z4 v" g/ [) H
matplotlib.pyplot.xkcd()使用
$ U4 s7 H2 n& q, a$ m如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
$ d# X6 q2 D! G
3 F+ a4 {' {; H8 X& R
& r7 v$ ~7 s' ]+ r) n; Dwith plt.xkcd(scale=1, length=100, randomness=2):: F# i/ @ L0 I7 U. p* }% p
#with是临时使用一下,不影响其它图使用正常样式
3 {3 H- N8 m7 t. ? 绘图代码. N' s: ^* h8 {( t
。。。。。。" y; c; U8 Y) J8 R8 T+ g
plt.show()9 R K! E$ Z$ Z/ S
matplotlib.pyplot.xkcd()使用实例 2 c* p. M1 t: ~# y. q" V! m% H% _! `
下面代码为pythonic生物人公众号之前的文章代码* Z, }* U% q @8 M. W
2 I j O: ^# e8 H3 p% V4 f8 u% u& v
以下参考:Python可视化25|seaborn绘制矩阵图5 R7 l9 N+ X$ E5 G' u1 h$ g
& g2 T: Y, }3 O# k4 g; T% z
. d) U5 J; @8 ^$ \2 `) C+ A
#支持seaborn
. _, _. h/ M2 M$ x* U! U/ Pimport seaborn as sns
J' e. Z, M2 r! B9 Yiris_sns = sns.load_dataset("iris")2 ^' K& k! a4 o/ A$ q8 R& S
with plt.xkcd():
# l3 [2 r& o6 u& b g g = sns.pairplot(
% P4 B. U: P' U p0 U3 A5 r iris_sns,( t! h/ a9 Q/ j# p% U# [3 }- B; C5 @2 F
hue='species', #按照三种花分类
9 f- d3 C, d' ]. L palette=['#dc2624', '#2b4750', '#45a0a2'])
4 \; I) H& b3 x. O5 c8 { sns.set(style='whitegrid')
0 Z/ d+ f- q' E- q g.fig.set_size_inches(12, 12)# l- H F+ Q( b: a& w
sns.set(style='whitegrid', font_scale=1.5)' i `: Z0 ~. T- D! m- ^6 |
! V7 h) j$ z8 R" [$ T/ U* I* p! k* n- j' q
& e! m' r3 ^# V7 W以下参考:Python可视化29|matplotlib-饼图(pie) * x5 n; U) |; Z3 T, v* j1 V
: s& u* h; V, R! x) _$ `
- x. G {+ T1 Y( |1 n6 x) A
import matplotlib.pyplot as plt. c5 ^; d8 ?3 I
with plt.xkcd(2 g( i" Y5 v2 a' _2 Q
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度% Z7 m, m* r- J
length=120, #褶皱长度 j( w- S5 {0 r, X* L% H9 ?( X9 X5 A
randomness=2): #褶皱的随机性
5 `) K' s& K8 p# e' q plt.figure(dpi=150)
' \, ~- G$ Y& z patches, texts, autotexts = plt.pie(
4 }1 P8 X+ L4 T x=[1, 2, 3], #返回三个对象% {/ Q: y2 l) E8 v$ [
labels=['A', 'B', 'C'],, h- o& K) Y; B# {
colors=['#dc2624', '#2b4750', '#45a0a2'],
+ `9 m* q" o% e3 }% ]8 u) [ autopct='%.2f%%',1 K) e8 ~4 _ h. S
explode=(0.1, 0, 0))
/ K$ H2 R2 {! B) u' v texts[1].set_size('20') #修改B的大小) `; \5 z0 z/ n, l1 G
0 x" t% Z; \2 @* s$ r
#matplotlib.patches.Wedge# I) R( a0 u0 Z4 V
patches[0].set_alpha(0.3) #A组分设置透明度. u- Z) o: F5 n/ c) z
patches[2].set_hatch('|') #C组分添加网格线
7 A, y g& b' s patches[1].set_hatch('x')% W0 j& x; R* Y* a4 q: V; n1 o, E
. M3 \; \6 ^, J' U: T. ?5 c
plt.legend(
) j" z; B8 {) T- Q; ^ patches,
1 F) L; v8 H/ L8 U1 R- \5 t ['A', 'B', 'C'], #添加图例, V# i8 D, g7 s
title="Pie Learning",
( }' E$ F% d/ C/ z; u' y) |7 O6 a loc="center left",0 p5 e: ~& _: j& D/ C# b
fontsize=15,0 E& L9 Q5 K2 c+ m" D! d
bbox_to_anchor=(1, 0, 0.5, 1))7 P# `" ^4 Q5 `( |- }
4 e1 a! a- g) W, ^5 \# s
plt.title('Lovely pie', size=20)
6 b3 u) B4 b* _ plt.show()% E" T) r9 y( u7 p/ o5 y6 j; t- [
" O. ^, m6 e2 C) Z1 H" D/ {4 P0 T, U6 z$ A
/ m5 l! W0 F5 i, _7 @! G. w% g6 k0 T/ z% {' S+ G0 ~& H/ Z4 u1 s
with plt.xkcd():" e% N1 A" ` r) V; ?
from string import ascii_letters
v5 S9 I) ~2 c( F- l8 \. t plt.figure(dpi=150)0 E; ]4 \4 s5 W% y" R0 F9 E! g2 b0 b
patches, texts, autotexts = plt.pie(
7 O# b: C7 {- ^: F x=range(1, 12),
3 T5 A2 M. |6 T) @" y# m labels=list(ascii_letters[26:])[0:11],$ @6 [$ t1 L6 a
colors=[+ L. H% e( `+ X5 {8 j! ]& Z
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',% w& U6 _+ y7 x' J5 A. ~
'#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
/ ]' j, J3 a, T7 D5 ] ],/ @) ?$ q. T( O5 Q* ^5 @7 b& t
autopct='%.2f%%',
( Z9 ^0 v+ ~; t )0 t5 d% v0 G3 ^
plt.legend(
0 f" X6 D! w2 B- z( T9 a patches,; [$ }; i; ]( v9 F, [
list(ascii_letters[26:])[0:11], #添加图例' L/ \9 A8 V9 c) }5 K
title="Pie Learning",
! t- S/ o8 g% { n- d loc="center left",
+ @; S2 u1 d5 { bbox_to_anchor=(1, 0, 0.5, 1),
( Q- j& w# X% T ncol=2, #控制图例中按照两列显示,默认为一列显示,
# d- R+ T, U& v/ k )
' G1 }7 x5 r3 {0 J" n) B( h6 k8 u9 u6 t. q4 r3 K
7 n, A$ [9 K( p% m4 N+ z8 p0 H2 ?$ K
" @& Z1 F- k: x# G1 k
r. V: ?6 `+ e, U+ |8 X- g5 }3 ximport matplotlib.pyplot as plt
! K; V- W6 R' K- D5 L. {, L1 Nimport numpy as np
. Y& V% O5 o& @, r0 U+ Q# vwith plt.xkcd():4 u& }' I! t2 c$ V& V3 g
plt.figure(dpi=150)2 p+ H. T! f: i6 d6 T; ?0 Y% X8 @
labels = ['Jack', 'Rose', 'Jimmy']
4 B! i0 z& \1 [6 `1 J+ O2 o2 \4 ` year_2019 = np.arange(1, 4)
3 N: j0 M7 y8 |9 N8 t. w year_2020 = np.arange(1, 4) + 14 ?* Z4 u! S# ]$ r
bar_width = 0.4
0 G# Q: A4 z* l5 |+ V" F. h , v3 H. x# A+ K* q' [" t
plt.bar(
! s8 s8 e4 ~/ `. d( i) ~0 ] np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
4 M7 E! R% {; @4 V+ y# M, r year_2019,, y5 q4 O1 G* z4 }
color='#dc2624',
* |" H9 i% ?$ f O width=bar_width,
0 A2 |: S1 Y7 P3 q, \ label='year_2019' #图例% z$ P+ a, u4 |9 T" ^
)
/ C: l3 W" {7 O/ G" J plt.bar(
3 w5 T$ O6 o1 W np.arange(len(labels)) + bar_width / 2,
+ _' c* b) n) m& U8 M year_2020,
4 f/ u( M/ T$ d, S$ Z h# u color='#45a0a2',
3 l/ o' d5 k1 G width=bar_width,' ?+ u2 ]$ c4 l( Y6 c: V
label='year_2020' #图例
6 n3 G |) w2 Z0 b: h )
% o) e- z. T6 Y9 ?. m. t& ^3 L plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称3 d9 W7 g2 Z- q+ q
plt.legend(loc=2) #图例在左边
8 J6 K, x: [2 c7 p7 X* \- L* U/ X以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
% r6 o$ `/ l4 E, Q( ]/ R( B0 D0 f& @" I, {7 ]* v6 }
1 a1 k1 ?1 K! J7 X8 S* K4 c0 _
7 F5 |5 v1 ?) i) Y
; w0 K, \4 a6 n# Q
; {! N9 H$ J t, ^& Y' c9 C9 {& P* i) A5 s. J4 A! X
以下参考: Python可视化|matplotlib10-绘制散点图scatter
* f) r' y9 w# G. Q- a+ g' e: o0 y5 w9 W. ^8 X$ `8 I, z5 T5 S9 B' R
. p3 x1 ` ^! E7 V- V1 L% r! Himport matplotlib.pyplot as plt2 v" f: @2 U, |7 q# B, A
import numpy as np* e2 S% f" G1 {3 o: L" H# d
import pandas as pd( t& x! `- a6 Q% u9 }
from pandas import Series, DataFrame
1 a5 C: T$ F6 ?% i#数据准备/ `# N# Y. i2 s% a# x
from sklearn import datasets6 n" U* L$ v7 Z, k" d
# R$ N$ @& ? }0 J! ]0 } L5 J( riris = datasets.load_iris()+ [0 @' ?, h8 r+ M% V
x, y = iris.data, iris.target
- a/ E9 l" ~9 Y0 l$ Ypd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
- X4 K& R$ C4 F: J0 `% Z9 z4 u columns=[& Y) y- d# G' P1 ?
'sepal length(cm)', 'sepal width(cm)',
, w( F- u0 G; m& P, N, P2 x( w6 t 'petal length(cm)', 'petal width(cm)', 'class'
1 r8 p, i* K7 v" a% ~8 z ]) U$ v3 B/ c" T' M% G4 C4 f
with plt.xkcd():3 x( T) q# v/ p2 n! w! C( a
: D$ [& {( E- F" c- X8 T2 N% d. n
plt.figure(dpi=150) #设置图的分辨率
- z8 _3 C( N& x' ~. e7 s" Q+ }% i, y4 k #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图
; W% O% T. j& d' K iris_type = pd_iris['class'].unique() #根据class列将点分为三类" ]+ g0 U- N' A, X- L
iris_name = iris.target_names #获取每一类的名称% ]0 S7 k t( Q4 F
colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色# y7 O, b+ Z5 R0 c- ?! N& ~$ U
markers = ['$\clubsuit$', '.', '+'] #三种不同图形# A8 r' x* @' ?) ]) G; Q1 G
" p' I8 S4 c7 \, ~# z- j for i in range(len(iris_type)):" D6 }7 Z( @+ @
plt.scatter() u% C+ s& `% B; V2 S6 }2 M& J$ g
pd_iris.loc[pd_iris['class'] == iris_type,0 D! G4 E8 D1 e, Q& Q8 k2 x
'sepal length(cm)'], #传入数据x; ^, X+ j* l" r6 }3 Y4 R. K
pd_iris.loc[pd_iris['class'] == iris_type,
' \* X( P0 T! C 'sepal width(cm)'], #传入数据y+ K2 Y( B! Z9 W8 c# T, x9 @2 x
s=50, #散点图形(marker)的大小
/ t+ f6 ~! [; V9 u# U3 J+ D3 I2 k c=colors, #marker颜色9 H( B" w' d9 X) T( x; m
marker=markers, #marker形状
1 V9 ?2 ~& _9 H #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充
3 H9 K! s" g H! I& k alpha=0.8, #marker透明度,范围为0-1
+ h2 x% j9 ]- z' U3 u E' M6 ^# m facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c/ i) O9 C+ C: x0 V) ?/ U
edgecolors='none', #marker的边缘线色6 ^' H5 G$ Z8 x L3 ?
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
$ F d4 B! m5 R label=iris_name) #后面图例的名称取自label( u; d- ~# F) z% d; B$ a, E
8 P. Y$ o3 }, c; W# i6 c4 ^ plt.legend(loc='upper right')
8 h. q4 x: {5 P4 K/ d2 g- x+ q5 \7 t8 W8 l+ v2 J1 s# S+ w5 m0 t
$ P6 c( b) U: _2 B! ]
————————————————
1 Y9 u: L& o# J) J" g6 w! t版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。+ V$ \5 P2 g0 F0 s
原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753
. u5 `5 A0 `7 j: L; i9 c# k
) I1 ]1 u& T1 Z! L( _: p- L j. M: V# |- E9 o# k0 u/ @
|
zan
|