|
2 V+ D! y# O! g: I) Y/ P/ [! ?
原创:宋宋 Python专栏
( M$ T9 [( s- }4 k" ~ 来源:Python数据分析:折线图和散点图的绘制
1 L5 B0 ]% W) v3 x- d 折线图
9 z$ j" R$ j, X8 y; }/ x 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 3 W8 }$ k7 w, p, F7 |* p) X' A
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
0 G" {. E5 r- P: a 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 d) @5 ]% k4 @( N" H
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。 " F) n6 I2 k5 B3 D2 V5 Q
import matplotlib.pyplot as plt# x. O8 X7 G$ n, ^+ f
: F- n R, }. w% C+ Y2 L x_data = [2011,2012,2013,2014,2015,2016,2017]
7 f9 v" C% V B8 G y_data = [58000,60200,63000,71000,84000,90500,107000]
1 r% [0 B) O9 L* e3 t1 [/ z( s
) M3 J/ K: N% N* r plt.plot(x_data,y_data)- j) ^ d5 u4 N# F) t" c
plt.show()
: e8 I; {8 ^- x2 ~
1 m8 s% K s( [/ Q) O2 o
' q+ s, ]0 M4 I/ Z9 n- q4 v 2)复式折线图: 9 m0 H* D. H- ^
import matplotlib.pyplot as plt
& o. R) w; ?. x x_data = [2011,2012,2013,2014,2015,2016,2017]0 L+ X2 ^4 L9 ?/ B {7 e9 g
y_data = [58000,60200,63000,71000,84000,90500,107000]6 S4 E" P; ^6 T
y_data2 = [52000,54200,51500,58300,56800,59500,62700]
& \5 z% ?9 J1 e" r
' D* o9 U3 O6 U5 n plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--), Y, A/ o. h8 l% Y' x" z
plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)
6 G1 ]9 h% @; H plt.show(). P% `4 t/ c& M* T8 N6 d
7 s8 ^* R5 z4 N/ v8 {6 `$ B6 J
% P0 H/ m* e7 Z I! \
注:说明:参数color=’ red ‘,可以换成color=’ #054E9F’,每两个十六进制数分别代表R、G、B分量,除了使用red、blue、green等还可以参照下图小白参数linestyle可以选择使用下面的样式: - solid line style 表示实线-- dashed line style 表示虚线-. dash-dot line style 表示短线、点相间的虚线: dotted line style 表示点线参数 linewidth 可以指定折线的宽度参数 marker 是指标记点,有如下的: 7 e" ~6 B$ L! u+ g) q
: J0 U) k9 C' u" I! d+ l! i( j) D 3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
4 G' _5 N6 a5 y; D$ U: N import pandas as pd4 R- e' D/ y0 J% K
import matplotlib.pyplot as plt' G# t3 }8 @* g. F) m9 s {* t
, V, A3 H4 K" K# R" ` #读取数据9 C* n* N( X" L8 q
data = pd.read_excel(matplotlib.xlsx)
4 S% V8 f: q5 U" ]6 a" h: P/ @6 ~* e4 C* U
plt.figure(figsize=(10,5))#设置画布的尺寸
2 ?9 q. K) e$ v4 w plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小, O- O0 @" p# r4 Q: B
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小% B7 C$ F l j& O! [ P
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小1 J/ m0 v. O& [) i
8 q( V$ T4 [# R; y #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型
+ c, M2 v7 z" E in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)4 e: O. n5 ^" i# }
in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
% p) ?+ f8 m( ^, L( ^* i8 [% E in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)
% Q$ s8 }& |2 b4 P; [* g0 D3 R6 f6 |7 I' Z+ G0 S
plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
2 e& t1 @ q" i8 e1 C0 D" O# W plt.show()#显示图像
1 ? K2 d& d8 _" \* i8 Y8 c+ ]
& i! O! h* i; B- ] 9 }# H7 I. y# u; F. @
4) 管理多个子图 , U9 ~1 t, P; q/ R" q7 c4 I' s1 E& F
import matplotlib.pyplot as plt
5 n4 u" y7 r% O9 h5 i- K9 ^% } import numpy as np+ ?0 b x' K0 f t
import matplotlib.gridspec as gridspec# }7 O1 a" t: y3 n
import matplotlib.font_manager as fm #字体管理器; p8 z/ a; H2 D D- R& u
8 P9 w3 D: y8 b
my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")9 \' p; M- L( h7 [
& ~5 ?1 o% K2 _! V8 v
plt.figure()' _9 l& m c) e: j6 Z
3 l. z. g( s& k4 K4 p8 H* A x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)
3 y2 A3 d }+ Z( u1 j9 C gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列
6 s W9 D" A+ L) t$ y ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行' h" w; j$ y- ~0 o9 o0 g6 V% Q" }
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)* E# d& t& H; t7 Y9 ~4 ?
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
" b% c, S i- F+ |# d! i! \' r- E a% f# T$ Y
#绘制正弦曲线
/ u& q1 w/ U" d9 F ax1.plot(x_data,np.sin(x_data))
3 d0 }8 J( Q2 |7 D ax1.spines[right].set_color(none)* H) o3 n# d4 O8 l
ax1.spines[top].set_color(none)
4 y1 h( j+ ~6 H, s2 [& \6 E ax1.spines[bottom].set_position((data,0)). s2 j1 k8 \ L+ W; Q1 f
ax1.spines[left].set_position((data,0))
5 _" a$ S. X: }/ ~# Z- K* ^ ax1.set_title(正弦曲线,fontproperties=my_font)! n+ P8 A( n. V# k* w
* u( X& V: s X) F; B
#绘制余弦曲线
( @& \3 C/ A5 P6 X+ u; s ax2.plot(x_data,np.cos(x_data))
1 j& z! _2 L9 @6 C4 J- o ax2.spines[right].set_color(none)
0 }5 c+ j4 T4 O* @6 Z, ~* ?9 u ax2.spines[top].set_color(none), M- ~. w1 P0 W8 a" U( c
ax2.spines[bottom].set_position((data,0))
# c/ }9 E5 |2 J6 |& p1 o ax2.spines[left].set_position((data,0))
9 p% U" |, e+ G2 | ax2.set_title(余弦曲线,fontproperties=my_font)5 @0 V5 p8 t* B
) B0 ~9 x3 ^+ F- L2 i+ D0 F #绘制正切曲线* \& L X8 b6 I. @0 ]6 O+ H
ax3.plot(x_data,np.tan(x_data)), C' \7 j0 G. D6 j+ E+ k Q
ax3.spines[right].set_color(none), t l2 _* J+ {
ax3.spines[top].set_color(none)
+ D: @8 g' {" a- r ax3.spines[bottom].set_position((data,0))
5 [) C& W+ E4 c6 B5 N: f ax3.spines[left].set_position((data,0))
, Z" E5 x9 D- k4 b ax3.set_title(正切曲线,fontproperties=my_font)2 p* C- S- o8 z( l4 m; R) z l% `
plt.show()
8 n* ?* c% z4 X- U0 D' B0 { ! `" K" {8 P: S9 j/ U& I
结果: 4 |6 ?8 |* H [+ Z" E( x; a
' h: Q. Q( ~: J5 @) Q
) f2 d5 D' Q7 N; \: `5 }
* Z6 O- L- s7 E* M. k+ @( B" J$ r9 }) }
5 R$ u/ T% N5 y }- l& I r3 \# S5 {/ m$ r7 k
|