- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565361 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174831
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
, o% A5 a: ?8 Q6 {% f1 _一行Python代码有多强,可让图形秒变「手绘风」
/ u: n# k! Z- O( K0 h之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具( Q; S# T) d3 r9 y% E. E4 ~' ^5 ]
3 C) o0 F$ c0 O
7 ?! s7 ^' Q1 e0 G/ m但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。' X0 H5 e1 I+ R1 H
/ w) r J9 u+ T5 Y3 o' _6 A$ d
7 u$ k; d3 a7 q) m1 D% u* Zmatplotlib.pyplot.xkcd()简介; t+ t: _. n4 b* U6 y- ~8 o& `
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小2 x' A& C$ p% e; y. o
5 H4 a6 a: \6 h# a* P
9 H- S) u/ s( N9 M2 wmatplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
; c' J/ _; M: V* G0 C4 | length=100, #褶皱长度
+ }8 c& k% R( E8 U" { randomness=2#褶皱的随机性' c, B2 m4 `, D! l4 x
)
9 B E4 E, w3 ~2 ]- L5 d# Z2 }" xmatplotlib.pyplot.xkcd()使用
# x0 I: G* f/ C' `1 {" @如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
6 J5 f) z4 X2 J) q! V
^2 V. I* i3 d+ v" v1 g% ~% K* j
* U% v5 N- ~; G, v& T/ twith plt.xkcd(scale=1, length=100, randomness=2):. k4 ~# P( l. I) P
#with是临时使用一下,不影响其它图使用正常样式
5 e% S/ }( h6 W7 H 绘图代码
7 _! r4 A( {1 K! N9 k 。。。。。。9 n. T" V* @8 B' }/ a
plt.show()
; ~2 \2 B* U, u9 [3 L( ^matplotlib.pyplot.xkcd()使用实例 : z9 Y! C( B# r4 P
下面代码为pythonic生物人公众号之前的文章代码, \! Q4 @9 g; O
1 X$ o3 |! U9 }$ R, R1 B: C
a! n) h' O; M% }) k$ W
以下参考:Python可视化25|seaborn绘制矩阵图; y, k" I) y2 e2 ^$ g4 w. E
. _# r" R1 |* P9 a+ R% Q9 M
4 ]* g1 z% I4 o+ N#支持seaborn( f3 d7 y! g2 l& f/ M
import seaborn as sns
* v8 O) K" G1 w5 K: _! Giris_sns = sns.load_dataset("iris")9 B4 ^" @5 p. |) I6 q
with plt.xkcd():6 i9 r- j# r2 G" B, M) |
g = sns.pairplot(! v# }, r& n3 u" @7 b+ O; I2 a0 q1 k
iris_sns,
* R3 v2 @+ M# Z. O+ [ hue='species', #按照三种花分类( Q' ^/ v6 A5 h, ]% C8 x, M
palette=['#dc2624', '#2b4750', '#45a0a2']); d3 V$ n- W% k7 S' H
sns.set(style='whitegrid')
6 y: P4 m7 U a+ }/ V9 u" O& M g.fig.set_size_inches(12, 12)6 G& m6 ~. M" X9 t
sns.set(style='whitegrid', font_scale=1.5)3 ?/ m6 t$ @6 e0 q- h
6 \4 O9 \% {# K n8 n0 H) a; T9 W5 b& r5 q F- Y- n# d: @
5 [( `0 U9 [; ^6 A8 L
以下参考:Python可视化29|matplotlib-饼图(pie) ; S4 X/ [4 X( ~5 t3 [4 P: Y8 z: F
+ Z+ ?, p4 ]* j# T5 ~3 c, t( a+ Y" j7 e3 h0 d
import matplotlib.pyplot as plt7 B- e3 E8 L1 D! g, n, ~) [% m
with plt.xkcd(1 E! d" D; x6 ]" ?
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度
6 V. ^# ^0 h4 T: S: j2 w" O& _ length=120, #褶皱长度
8 Q }( ~; I. {# G randomness=2): #褶皱的随机性
: T; i4 e, {9 d( A6 R plt.figure(dpi=150)
+ _) B8 X5 O3 |. z patches, texts, autotexts = plt.pie(/ ^9 J. ~' p8 ~2 N( ]9 Y$ C& `+ V2 X5 F
x=[1, 2, 3], #返回三个对象5 g/ s6 F( h+ ^, i+ c
labels=['A', 'B', 'C'],) `& h, m' n, Q z0 G
colors=['#dc2624', '#2b4750', '#45a0a2'],
! Y. E. h; b! s& F" k6 s' {8 G0 | autopct='%.2f%%',
+ {" i( F/ X. F# T( j, z explode=(0.1, 0, 0))
: v- ^. D3 D4 _6 M7 [ texts[1].set_size('20') #修改B的大小
- u5 W3 ]6 g; v# r0 w5 g
8 d: _; f2 G4 z5 H4 t& y" m( m #matplotlib.patches.Wedge
- f/ A _: L) @ patches[0].set_alpha(0.3) #A组分设置透明度 F' D# q9 x& B- B' B$ q! f
patches[2].set_hatch('|') #C组分添加网格线
A0 u) T9 `2 I$ K& [ patches[1].set_hatch('x')
5 \: k& s6 C3 @1 u % u1 E: W& t# ~" f& d5 r# l; A
plt.legend(
; G' ~0 G5 M4 X O) p patches,! V/ m. s% G+ y$ n
['A', 'B', 'C'], #添加图例2 k! C5 @4 l& z+ [
title="Pie Learning",- s4 l1 r& {. R7 u; K
loc="center left",
5 ~$ ~6 H- O- A+ O fontsize=15,
5 y1 w; b$ Q1 d8 Y! Y: K6 m3 ~0 L& J bbox_to_anchor=(1, 0, 0.5, 1))4 O# P/ G: A# a
" H% v; y% P$ y1 N. { plt.title('Lovely pie', size=20)- r5 l$ Q( K' q4 u
plt.show()- Q* ]" Z& q f. y& I
8 H2 X$ V! ^7 J& f, [1 i& v
- [8 B! G/ V1 m# `- E! K& e9 q4 T1 e
; X, R5 M5 X. v* mwith plt.xkcd():
" F, Y% r3 D( p' X/ D from string import ascii_letters
, O; B( ]5 B; ?! P% {: z4 P1 c* N# r plt.figure(dpi=150)
5 c, M. j4 K( x4 l7 Y3 @ patches, texts, autotexts = plt.pie(
4 ? e& u! d" b% s4 ^ x=range(1, 12),
6 l1 C3 _# _2 s7 J labels=list(ascii_letters[26:])[0:11],
5 m$ o8 f8 M9 I$ |* c colors=[
S. u0 q% M0 F0 @8 A8 T% w' D '#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
* N" ]2 l* O* ^( G" O3 a- z1 r '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
. j' S- h1 i9 |4 j* J4 D/ ? ],
+ \# @6 p: D5 E autopct='%.2f%%',
6 M! i% y0 I( Q" P2 M3 P )# B. j2 Z. v$ t7 d) r
plt.legend(
: u& ]; L* n, b8 `4 B patches,, J7 N7 M3 k ]
list(ascii_letters[26:])[0:11], #添加图例& t0 c0 K. [2 k. ]6 I- ? W$ q
title="Pie Learning",
& ~* {3 d8 t! J' y ?, s, W loc="center left",
* |3 R, A( P( j5 U) } bbox_to_anchor=(1, 0, 0.5, 1), O# V- s9 R8 p6 v
ncol=2, #控制图例中按照两列显示,默认为一列显示,
5 {( o# ?4 p4 j- n ) y O2 q$ _1 @: B
' y5 C/ b; K" `: U1 \
' L C6 I- I' p* f
3 `9 T7 `8 r+ c: b& e: a" Z( O% S! J3 P6 u- ?& d2 a" i+ Y
import matplotlib.pyplot as plt! u+ g( b1 I- I. K6 |# [
import numpy as np5 }2 v7 H0 n2 @6 m, G! [# U
with plt.xkcd():7 G: e* }6 ?. X6 Z( ?7 V* f" i) T2 A
plt.figure(dpi=150)
# ?& s. }/ Q. _* w labels = ['Jack', 'Rose', 'Jimmy']7 h( O: p5 M3 Y8 h- Q! s# h
year_2019 = np.arange(1, 4)0 D5 ~. A7 E, v# {. w7 x& G
year_2020 = np.arange(1, 4) + 1 y2 e+ F" [3 E' K* D y4 D G# D, b
bar_width = 0.4
( o V6 {) U- [# _ m# W+ V
- @) m( \. z' } plt.bar(* w; a4 h# Z! w3 u: I/ h
np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽- b Z! @$ k+ M" ] @: w
year_2019,
: B d* C& Q7 L. M color='#dc2624',: O! H: O/ K u2 \# `) Q
width=bar_width,
. P7 k2 _9 t! c4 d3 N$ T label='year_2019' #图例& f$ Y5 A+ W& C. G/ |6 B* q# |
)
( V: t3 u+ Y0 P: J plt.bar(
3 Q# E) y0 w3 e7 q, K: h! ^ np.arange(len(labels)) + bar_width / 2,, e5 U" q9 o* @" P8 |9 Z7 R% ~
year_2020,6 o: K' k, G) g/ U# C
color='#45a0a2',- k% y0 ?) j% X( U4 h4 c# r H
width=bar_width,3 {8 }( a9 l" D7 x' v. g
label='year_2020' #图例
2 d- J3 Z6 }0 Q2 c; v4 k )
" W. T. K, s0 V- w0 f2 F plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称, D% k: U2 ^) O8 l* K, d
plt.legend(loc=2) #图例在左边
@/ X% {6 t+ H _, b: d" [& t6 U以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
" r1 H7 K0 Q+ b4 W" Y
. X: g7 ?) S$ c& J! A7 z j% S6 C1 |9 s. l g
: i7 z5 j3 \- \4 A+ ?2 v( I
0 X% }% [- S" e
$ ?' |9 C# L9 o8 S( \) X5 @
# X% C( K4 C5 T8 O' P S
以下参考: Python可视化|matplotlib10-绘制散点图scatter
# H3 |- w9 e0 t* Q
5 T# L7 E- u- _9 G
& W3 G" a/ N7 O& q, P iimport matplotlib.pyplot as plt
7 m! }3 j7 l3 L( D; gimport numpy as np; C$ W f2 |; M+ c0 X4 U
import pandas as pd1 g9 Z7 f/ v; s# c- U ^6 P
from pandas import Series, DataFrame4 r8 H7 X2 W7 L; I
#数据准备
* k9 Z; X' }* x' afrom sklearn import datasets
+ A9 ~% V q4 t: ?; B7 {5 V
! L2 |' x" u9 l0 R: ~9 H# ?. F* N& }iris = datasets.load_iris()
2 ^( n, L8 c) z8 ~/ `7 rx, y = iris.data, iris.target
; x( x9 {! m. T% E% Bpd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),) g8 Q7 U% _; ]8 }" ^5 W
columns=[4 u: u" X% P! c) W; ?
'sepal length(cm)', 'sepal width(cm)',
$ n0 ^3 f' d' Y 'petal length(cm)', 'petal width(cm)', 'class'3 b% W/ M0 p4 _+ [
])
" c+ G! |$ f; qwith plt.xkcd():
! D1 I" u3 F- C. D) `. e; f" j - B! O' @5 {4 g" e U
plt.figure(dpi=150) #设置图的分辨率
+ I; M. h7 A2 {+ x+ c5 X! `" a #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图7 T. d, `- U# O+ ]3 [
iris_type = pd_iris['class'].unique() #根据class列将点分为三类$ v6 O, g$ |0 |) y9 C" N7 C5 e
iris_name = iris.target_names #获取每一类的名称
# _/ f) ?! p: D* _9 o2 p colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色4 b8 U+ m/ X# j
markers = ['$\clubsuit$', '.', '+'] #三种不同图形
2 Q. N: G9 r7 f0 P4 U( e6 J + Z7 N; o6 d, L+ S+ N; G
for i in range(len(iris_type)):
6 l* O+ ]" i1 |4 N plt.scatter(
l* N s1 L; t& K) s pd_iris.loc[pd_iris['class'] == iris_type,
2 R' ?3 p$ l: j5 E% g/ @8 W8 Y( q 'sepal length(cm)'], #传入数据x
% D7 K+ d) ^# h1 R pd_iris.loc[pd_iris['class'] == iris_type,
( M6 K! O5 `% E/ @/ B 'sepal width(cm)'], #传入数据y
, f0 Z: `, h* V& C% M7 K s=50, #散点图形(marker)的大小
% [* F: k. G2 `$ m& R5 _/ V. a c=colors, #marker颜色
" \ }" g q1 e& F" T. c" M marker=markers, #marker形状" y! X q* `) U* N
#marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充 V# Q6 p% c. f3 U
alpha=0.8, #marker透明度,范围为0-1
, o; O1 h1 o* p, O/ ^ facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c
( D- W. z5 Z y' V& }2 e9 [; I edgecolors='none', #marker的边缘线色2 p6 P1 s! ~7 `& c, u. Y# B
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用: C X# b- I! E3 ?
label=iris_name) #后面图例的名称取自label0 A# J5 j( D2 ]* @- m
8 P8 S6 z6 L* Y; R6 ?- n* W* f0 a
plt.legend(loc='upper right'), }* D8 {; Z2 h
7 }: i: t4 K, S, A
' R1 |: Y0 Q g————————————————. o3 E/ _5 C0 w6 Q. @/ J- S, Z
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
0 G$ L/ w \& l! e* r3 _+ k6 }原文链接:https://blog.csdn.net/qq_21478261/article/details/1189637530 d2 \6 |' v: H/ N" j& m; q
! H2 J, x6 |: ?( }/ M( L5 d8 e- |5 d; s5 n7 P
|
zan
|