在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 564563 点 威望 12 点 阅读权限 255 积分 174592 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
_% ], t9 @. ~2 O( n1 }$ h2 t- V! E
一行Python代码有多强,可让图形秒变「手绘风」
, v$ z; _8 H" X2 Y 之前介绍过一个绘制手绘风格图形的工具cutecharts:一款蠢萌蠢萌的可视化工具
8 V: X( W" Q! g9 \1 l) A7 v( G * r- {# Q" N" [' B8 t+ R- }
& e' P0 E5 }- O- L
但是,其功能有限,今天再介绍一个手绘工具(matplotlib.pyplot.xkcd()),一行代码可将所有Matplotlib和Seaborn绘制的图形变为手绘风格。 / Z! d! [) r% D5 l
" _7 a* i o, _) u 5 f* b0 L' S' s. d, l- q% Q( m1 \2 x
matplotlib.pyplot.xkcd()简介 , A" v" ? ~9 U2 o! q* k, X3 O
这个Matplotlib子函数特别简单,只有三个参数,别看参数少,但功能可不小 : b) k: j% t8 a
" o: O8 u- s5 U. q- z( @
* U( s* h" y: t4 h) a; k matplotlib.pyplot.xkcd(scale=1, #相对于不使用xkcd的风格图,褶皱的幅度
# Y5 Z% [7 o* B. H+ n3 Q# T& {# } length=100, #褶皱长度 1 A1 g; y) M! I1 ? y
randomness=2#褶皱的随机性 4 U7 m3 F* z. B5 [( U/ N! U
) $ E4 L7 n# p' ]1 U* V
matplotlib.pyplot.xkcd()使用
1 \0 q" R" q! q 如下,加with行代码即可,括号中参数按个人喜好决定是否设置~
& B4 L7 ?1 [$ \& m4 [ ! `+ @9 ]' ~% J2 ?8 k/ @
4 U9 \* a3 q8 P! L$ [! N with plt.xkcd(scale=1, length=100, randomness=2):
3 @" U) w: _' i: m3 s! } #with是临时使用一下,不影响其它图使用正常样式 ( z/ @* l8 }) ^& A) y
绘图代码
9 d* {# |, `- r% d0 X6 _" H 。。。。。。
% `' X: @1 M# z, J" ?* r0 h3 b* y plt.show()
& v2 r+ z$ | G) i matplotlib.pyplot.xkcd()使用实例 1 x8 k) s2 Q0 C1 ]
下面代码为pythonic生物人公众号之前的文章代码
9 n4 _3 f+ w! D5 M4 q+ W
+ n+ {8 ~0 F8 O# C" i0 | - P4 Q* A4 r2 I9 l0 u5 X5 Y# t2 K
以下参考:Python可视化25|seaborn绘制矩阵图 7 g; Z. p1 N( k' t5 r" k ?8 q3 C
1 V3 v( l0 L) H+ j0 h& |; F
! T; @" x5 [2 H( U. l9 I( i #支持seaborn $ J4 S% m R( l3 j8 k1 t- [; p
import seaborn as sns
+ l) d7 u( Y+ g: Z iris_sns = sns.load_dataset("iris") * H) h9 A5 }( s% c1 N: |( U( |
with plt.xkcd(): 5 W' l6 x8 [& V7 f. [) f
g = sns.pairplot( ( [* Z* t6 F3 v1 D6 @! }: t4 a
iris_sns, . |0 G* D3 c$ s& I! y3 x# X
hue='species', #按照三种花分类 5 c2 w7 h9 S, U# w% E# v6 o% Q B7 |
palette=['#dc2624', '#2b4750', '#45a0a2']) 7 X. K! U3 k) j
sns.set(style='whitegrid')
' q( |- r$ d9 `$ Y( X g.fig.set_size_inches(12, 12)
, [: N% _5 N% G sns.set(style='whitegrid', font_scale=1.5)
1 N0 C$ s; \8 |$ D# h; O. k
3 x: w# a C/ F! c " [3 v. ]8 B% b8 u! o; v
3 ^8 `6 Q4 Z; A O: b6 { 以下参考:Python可视化29|matplotlib-饼图(pie)
- v$ [; o$ ^+ F7 d
?" q( ~5 j6 S
. w; t7 o0 w3 Y- M4 G0 m import matplotlib.pyplot as plt 6 y# ~- R& m+ B G& [
with plt.xkcd( # }& J# |; V: A0 D5 @. J
scale=4, #相对于不使用xkcd的风格图,褶皱的幅度 : K7 z+ C$ J! [* o
length=120, #褶皱长度
4 s; _' d/ Q7 U0 P randomness=2): #褶皱的随机性
1 U! X% C! w( U& c% i# E plt.figure(dpi=150)
- a* P% w/ {9 _8 }9 w# `' _( P patches, texts, autotexts = plt.pie(
$ n$ q9 _- x0 P6 N/ ] x=[1, 2, 3], #返回三个对象 % k8 k1 G# [4 |- R$ ?6 A" y
labels=['A', 'B', 'C'], & L4 i. x2 @8 K8 j
colors=['#dc2624', '#2b4750', '#45a0a2'],
$ ^1 r1 n9 I) y# V P autopct='%.2f%%',
7 k" U. \9 q) a) F2 a explode=(0.1, 0, 0)) ( o$ J" U8 y" N5 q% J
texts[1].set_size('20') #修改B的大小
- k( r' ^2 L$ U% S( T1 k
5 Q8 Y2 ?# S% \6 ~. l/ t #matplotlib.patches.Wedge % h0 H% T4 ]* u4 h/ c3 u
patches[0].set_alpha(0.3) #A组分设置透明度 # u4 f; w4 |- c' L9 V
patches[2].set_hatch('|') #C组分添加网格线
3 U% g! D6 X" o8 @9 c* @; C patches[1].set_hatch('x') * r# _, g9 T. d9 W7 c" J; l$ R$ x" e+ p
- q7 J4 k6 \6 D2 ? plt.legend( % H$ N* u+ U' \- j" F) T$ d5 ]
patches, * P) x' R5 N; J& x
['A', 'B', 'C'], #添加图例 3 Y& b% L5 {' n0 n" M! g
title="Pie Learning",
5 ]! L7 v1 o/ ?% f+ z6 i& t! p# v loc="center left", 1 b' o1 q Z" |4 z9 d
fontsize=15,
& a# F; j/ ]" D7 _ G7 ~ bbox_to_anchor=(1, 0, 0.5, 1))
/ X: U( E4 X) n) \% O5 _% M/ a6 y8 u - O4 r. X/ ? B* W; Q' b' U
plt.title('Lovely pie', size=20)
* Z; t( a2 I, F5 i) s plt.show()
# ~7 ?5 M2 S" |$ x
% U0 T# e/ `; \* Z$ f
. U$ e8 K- q5 M( U4 _; _0 I 6 r$ d6 v" @* y
* }+ q; l" T- p& z$ I with plt.xkcd(): 5 q+ H- J" @5 T. a* P# e& e% [
from string import ascii_letters
( O& p5 i5 G+ C plt.figure(dpi=150)
9 I' k& ~3 u" `8 c# B patches, texts, autotexts = plt.pie(
# ]! z+ ~( x* c. o: Y+ y x=range(1, 12),
. ^8 ?: j$ g. @! U1 |7 N+ v6 E labels=list(ascii_letters[26:])[0:11],
* u) ^" A1 d. i. N+ T colors=[ 9 R2 \8 D( D0 W& g2 s
'#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D',
1 n$ q/ c& m% f- ] '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf'
' z8 c* C) x6 }8 ]5 F4 i ],
# \' e! Q! k$ ?* E/ J; f autopct='%.2f%%',
) ^, k0 w! l$ n2 D ) 9 h" s j- r2 w7 G! q+ y
plt.legend(
$ ?0 @& {; {: [ patches, ( r0 e. u; Q0 L, j
list(ascii_letters[26:])[0:11], #添加图例
$ V. } K+ _9 m1 S; A title="Pie Learning", 2 `3 [% r9 |! ~
loc="center left", 8 v7 N1 u! F: k% |
bbox_to_anchor=(1, 0, 0.5, 1),
) @, u. s3 X. s) j4 ~6 O; x' ^ ncol=2, #控制图例中按照两列显示,默认为一列显示,
$ I. I. ?: N j1 i( K9 m ) # U" ~: E4 I9 B* G# l( N5 Y, s
8 {; U+ P7 W7 X5 j8 h& r' t& z
9 X3 A6 b- a/ e% g/ k$ m0 x; Z
0 j! R N) p' C & S# L/ {: C5 R# B
import matplotlib.pyplot as plt 2 N, T* q1 i8 H: w
import numpy as np
A2 H% r1 p* g with plt.xkcd(): 8 T- [- D4 T+ t$ c# O) p' I
plt.figure(dpi=150)
9 L0 a9 ]5 e( s. s/ P: y labels = ['Jack', 'Rose', 'Jimmy'] : i! w2 W- A' }5 T& P' N2 R
year_2019 = np.arange(1, 4) 0 Q1 I9 g# r2 \8 h0 b
year_2020 = np.arange(1, 4) + 1
9 h$ M- b% f! w. w$ u bar_width = 0.4
, k5 {' ^! Z0 Z 0 Z* n, o4 z) P: O$ z( e1 ?
plt.bar(
1 W. K- Q% B" q& m% P9 F, [( L np.arange(len(labels)) - bar_width / 2, #为了两个柱子一样宽
' p( J( W _8 @% v4 V year_2019, 2 ?$ e) e- Q) f, W; n9 i' M: [
color='#dc2624',
+ n E7 A' n0 G% {5 F width=bar_width, ; x1 X1 N' c' m3 m' |" i) W1 j
label='year_2019' #图例
$ @1 F% ~% U0 w ) 8 f' l% L+ ~& j2 n: A& s
plt.bar( $ e6 I0 [4 w W+ y8 B. R
np.arange(len(labels)) + bar_width / 2,
9 b! v6 j- g: m4 Q. ] year_2020,
4 @+ T% K' \2 |* I7 w3 q+ H+ s1 T/ z color='#45a0a2',
8 s9 w- l4 |" }; o n6 `. I width=bar_width,
7 D! @7 o" {8 v! R# G S label='year_2020' #图例 9 M3 Z6 l$ K$ v( C1 f8 R
)
; h3 j: S' C% B0 W0 e( Y/ _ plt.xticks(np.arange(0, 3, step=1), labels, rotation=45) #定义柱子名称 7 X# O: W9 K# J2 n y" Q
plt.legend(loc=2) #图例在左边 : L9 b( ?# {. }
以下参考:Python可视化|matplotlib12-垂直|水平|堆积条形图详解 ( w3 C' j; l, d) @
* n1 \& Z- Q4 ?* y- Q 1 e5 S* H" _' R3 t" o) m8 V5 M
) J. w/ I* l |: {
" ]' k0 K, b! _+ l. P0 I4 S: N5 ] 5 l3 g+ ?, J1 g5 b& `- w- N) ]7 k0 N
( B/ ^8 K0 Q/ t) G) r" m) Z
以下参考: Python可视化|matplotlib10-绘制散点图scatter , U9 r4 ~. A+ C- M3 P
# m" b- G. P! h4 n
) B4 q* d! Y+ }9 i" d5 b
import matplotlib.pyplot as plt
" n7 {% D+ ] G9 F* W' Z import numpy as np
/ Q& O- k+ r. Q! _8 Y% k! [ import pandas as pd 3 k" d, ^6 I8 ~) H- I$ ?$ Y
from pandas import Series, DataFrame ! @ Y- u7 U! y, J( S
#数据准备 , D! j) P. D( @6 [, \8 T4 z
from sklearn import datasets
$ |4 j) |% W+ ~ K9 J& t
4 h. Y) Q$ L$ d8 `9 f iris = datasets.load_iris() - J0 L" s" D0 `! A7 I8 l% K4 V3 h
x, y = iris.data, iris.target , j: n+ s w5 V- B8 F1 G$ C8 V
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
' F; ~: u. P9 D0 @7 U& t columns=[
! K0 a |$ d7 R0 ] r# l# A1 Z- u- i 'sepal length(cm)', 'sepal width(cm)',
/ p; j: ~( F" j 'petal length(cm)', 'petal width(cm)', 'class'
* f, w, y8 Z! W2 m ]) D1 S$ ?" s/ ~ v+ Q
with plt.xkcd(): 7 M2 U, f4 B: Z% ^9 v4 d+ _$ o
* c7 a, W0 s- Q5 T' B$ f/ e2 l& \) |8 u
plt.figure(dpi=150) #设置图的分辨率
: g$ q S/ n2 E. M+ I) V! |1 s8 d #plt.style.use('Solarize_Light2') #使用Solarize_Light2风格绘图 + t, e0 c! S/ H; I" ^
iris_type = pd_iris['class'].unique() #根据class列将点分为三类 5 }$ P7 M6 F* D+ L4 o b
iris_name = iris.target_names #获取每一类的名称
- M+ Y) o& T5 H( i8 e: S. d colors = ['#dc2624', '#2b4750', '#45a0a2'] #三种不同颜色
* I. H S* v4 T3 V/ ^/ o8 z markers = ['$\clubsuit$', '.', '+'] #三种不同图形
j" t0 t9 P! l) x: C# h ; ? N( _. d6 n3 n6 G
for i in range(len(iris_type)): ; V: e7 h5 c% Q. L0 `
plt.scatter(
- ]6 a- C2 p+ L8 O, d% w2 G& f I+ I pd_iris.loc[pd_iris['class'] == iris_type, / B3 a$ W" {4 C) Y7 I- D
'sepal length(cm)'], #传入数据x
3 j' d: o, a1 F pd_iris.loc[pd_iris['class'] == iris_type, ) L" g- J6 K6 @$ ]+ x' X- s+ v
'sepal width(cm)'], #传入数据y
0 w7 w6 A3 K* @, A( a) c5 Y- _ s=50, #散点图形(marker)的大小 % v# D8 j: Z# u; M
c=colors, #marker颜色 8 |& f3 ]" Q, Y
marker=markers, #marker形状
* q5 O) j# v8 {2 `/ ^ #marker=matplotlib.markers.MarkerStyle(marker = markers,fillstyle='full'),#设置marker的填充 . ^1 J) b* M3 P f( h# r
alpha=0.8, #marker透明度,范围为0-1 7 F+ @- }( l) \! \
facecolors='r', #marker的填充颜色,当上面c参数设置了颜色,优先c 6 c/ `- ` Y3 ~) Y9 n- e/ p/ J# t
edgecolors='none', #marker的边缘线色 $ u2 J- n% c( ]: o. R' |
linewidths=1, #marker边缘线宽度,edgecolors不设置时,该参数不起作用
& N2 t/ ?$ ]5 Y) J label=iris_name) #后面图例的名称取自label
$ y' z! U6 |( L% L; p; u ) Q' O% ?: [3 F/ J& F) ?$ [
plt.legend(loc='upper right')
# d; o0 m7 u/ N
C( E7 T' u' x% X! h8 R ( e+ u0 c+ v0 Z! a8 ]
———————————————— 3 l, @- p! r1 Q
版权声明:本文为CSDN博主「pythonic生物人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
; C% l1 O; P( f H8 A* | 原文链接:https://blog.csdn.net/qq_21478261/article/details/118963753 - |; t# ?# X. [/ e1 I* O# Y6 @. ]
! y: @" Q& e8 b: {+ X
3 \) h$ ^& z4 x6 e
zan