|
- z1 e- r4 p7 ]/ h+ w
原创:宋宋 Python专栏 7 T9 q% e* _2 o7 N6 d
来源:Python数据分析:折线图和散点图的绘制
9 \! }1 n% {# L 折线图
1 k" `- N4 b) r, c7 A9 t 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。
: g. a1 d9 ^/ r, h* s Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图 ' @; v3 O% z4 z% J0 f; O+ N& c; ]& c! [
在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 k# a0 X0 c0 |4 \
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。 . X+ T$ N: C1 ~3 p3 t# K+ F U2 O
import matplotlib.pyplot as plt9 L/ |0 i1 N9 w, e/ {
& v% v7 C$ j6 H9 L
x_data = [2011,2012,2013,2014,2015,2016,2017]) T8 G6 l, ?5 N, n: I( u
y_data = [58000,60200,63000,71000,84000,90500,107000]1 u8 R- i1 Q" a# Q. j
/ \% k* J( j3 o1 a) b8 x/ S% {
plt.plot(x_data,y_data)* E" a9 s" t+ |! Q, p" F3 ~: m1 d
plt.show()
6 v" v9 O/ L2 H5 N C
+ t' p( o! l3 s" u + b0 Y1 y8 U. ^+ c# D
2)复式折线图: 4 z% _5 x: P( Y3 y7 P
import matplotlib.pyplot as plt3 s$ `/ E/ p& |( k+ j4 G
x_data = [2011,2012,2013,2014,2015,2016,2017]- S4 Q! l# c+ g0 K8 T
y_data = [58000,60200,63000,71000,84000,90500,107000]
: q: B6 X. u3 c- B y_data2 = [52000,54200,51500,58300,56800,59500,62700]
7 _& y% K( J0 Y4 ^ Q+ ~
$ Z( U" y1 c, D% |0 L plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
: G/ A1 `! M, i7 m plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)
8 c- R* ~' h# i& }* z: D- ` plt.show()1 n9 @- P, _9 j" F
$ V& R4 w. _6 W+ l z+ h( B% T5 a
6 n1 ]( o4 ? @4 U 注:说明:参数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 是指标记点,有如下的: . L" }' R! U8 n2 w5 D3 b
1 u% x. s' F! F' X% e5 r- }5 ]
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
! I! P4 R5 v; s5 |+ u import pandas as pd& C1 h- w7 ~' o
import matplotlib.pyplot as plt) P+ s" y8 s6 |
/ Z! w9 K2 u4 q7 P# j- W- W8 P
#读取数据, F( X! H" y$ d6 z( ?" D
data = pd.read_excel(matplotlib.xlsx)6 [; ] p2 M8 x/ x
A4 d, \) @2 k7 K! e% o, L
plt.figure(figsize=(10,5))#设置画布的尺寸
0 m1 I3 s% L- _! c( H plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小
0 C9 d/ \& t, Q1 B plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小% i1 S4 \2 F4 ^3 z: {" q. m, M- n
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小: P! s, c7 L" r
4 D5 G9 n P8 f8 Z, ]2 T
#color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型7 S/ F) ^! e2 t& t! Y# @
in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)
2 }( s3 r1 Y8 B& C( r+ c- L* r in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)3 @" U9 B( R" F; @; O
in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)8 o; i% ` Q* S. \) _! J
: d' V$ v" x3 C) { \ plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
! N9 W) ?& g+ D, t |, Z2 b8 u plt.show()#显示图像
; Z& S- c8 l, R C5 Y2 q! d 0 A) h! ^6 V D# d9 i" y
/ V* X0 r, S' ?4 N. B1 Q; I, M8 E
4) 管理多个子图
& A2 c1 K7 D8 ?" L7 H import matplotlib.pyplot as plt
/ P% i7 v/ k/ a7 x) k import numpy as np$ F. v& S, L- }& ~, Q; h
import matplotlib.gridspec as gridspec
4 n2 [1 K) U v2 O import matplotlib.font_manager as fm #字体管理器& U) `( Q" L8 g+ Y7 b: H
' }; f5 _# q9 r9 U+ l9 C my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
5 ~" x& g" {& ?! k
- F! v% _4 [; Q4 \! R- \' ^8 y plt.figure()' h# o6 Z) G3 _8 l
( j! B* _( H/ P/ `8 ^0 P1 ~" P7 S x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)
" K4 l! {5 v2 p5 ` gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列
% t4 h, G4 m5 I3 w7 b ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
& s: O: g. ]. @, S ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)
) R+ d% ?5 ]- t5 x2 B* O ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)" \8 }( @3 J- }& b; U
7 W2 I5 T! R/ n2 L/ r) L
#绘制正弦曲线
1 q: v) a4 H4 E, d( ` ax1.plot(x_data,np.sin(x_data))* [% x$ y0 {2 b, M0 N6 b; b% x
ax1.spines[right].set_color(none)6 l, l$ B* m+ {- m
ax1.spines[top].set_color(none)6 [ S8 S4 b. a; O/ t
ax1.spines[bottom].set_position((data,0))* H- f% y* N5 a9 E- K+ [# `5 h3 g
ax1.spines[left].set_position((data,0))
& X# m+ Z" C5 s6 g9 | ax1.set_title(正弦曲线,fontproperties=my_font)
$ m3 ?, y+ a$ t/ ~ H. f* B2 ], t4 p" x, j+ j# r0 q0 k3 ?
#绘制余弦曲线8 C: [! i5 \) ^( {# }- l) ]8 G
ax2.plot(x_data,np.cos(x_data))* O* ?$ T; ]2 b t7 r
ax2.spines[right].set_color(none) q( P$ |) R/ b+ A# k1 M5 i
ax2.spines[top].set_color(none)
' A7 |6 i+ i% X0 h ~: Z7 } ax2.spines[bottom].set_position((data,0))' q* ^2 t) l/ z% {+ x: d7 o9 e
ax2.spines[left].set_position((data,0))
- U: J' Q) ^0 M7 b' ? ax2.set_title(余弦曲线,fontproperties=my_font)
; w& L5 x% d) ]& l i0 f$ f% ~8 n& f6 c7 l! J( u5 c
#绘制正切曲线. b) [# g- W; ?+ N0 q; x' K5 x% D
ax3.plot(x_data,np.tan(x_data))
9 `7 @6 m& }( _$ C+ D ax3.spines[right].set_color(none), J# s/ @" a* J7 O
ax3.spines[top].set_color(none)
8 g' l3 q7 Q) ~+ ~$ \3 y ax3.spines[bottom].set_position((data,0))* \7 S+ m' ?' l: G9 }
ax3.spines[left].set_position((data,0))
7 v3 K, w- U$ E- o. O# ?$ M ax3.set_title(正切曲线,fontproperties=my_font)
% ~8 x9 }; k9 g. i6 r plt.show()7 P& ]8 J; s/ P/ ^# @! v
4 S: F& K; p- `0 c. U) o& W5 `7 {
结果: . W3 d x. r7 P
! q" o+ d5 u5 p6 ?5 d0 y, | 6 l- `, v4 m. {( `& I! L
7 P* M! u( {7 G; N& A5 A. y8 v, Q
& Z; t5 j8 R+ O* r) c
' Y$ k" s7 [- o6 d+ Q& o
8 |9 P2 | D( g( m' b |