|
- e% U( `& d. O0 E+ o9 v& Y' y* q
原创:宋宋 Python专栏 , P0 L" O, ~& x0 [8 Q
来源:Python数据分析:折线图和散点图的绘制
4 c/ k% q% A" H, o8 T& w 折线图
# G: E! ^3 K/ l 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 ' m. I: W0 V, D( h0 T
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
) f0 k' Q2 U' t7 b! @( z' G 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。
* C7 _1 _: n& Q4 G$ s plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。
1 }# {* Y9 N6 `% S" q* L8 q import matplotlib.pyplot as plt+ L) f R! h: ^2 Q" o0 E' ^# L
- d( [( `: P' g% N0 U+ M1 n9 d9 A
x_data = [2011,2012,2013,2014,2015,2016,2017]
. s" p8 y6 U. E( x y_data = [58000,60200,63000,71000,84000,90500,107000]
2 o5 `6 [' {. @2 x9 z$ E" I& P* z* c4 ~4 d6 x
plt.plot(x_data,y_data)8 V. \& x* u/ w g; w, P" g* ]
plt.show()
, Z8 B6 w/ O9 T8 n F1 k: e
4 z3 b) v) C* j# L7 {9 | 7 Y( f( J5 ~+ d6 @1 y& p/ ?+ ~
2)复式折线图:
X* h# u* ]# G; b( C9 ] import matplotlib.pyplot as plt N2 e$ n% W3 _) B, P% b
x_data = [2011,2012,2013,2014,2015,2016,2017]
% J, P5 E$ y; L: q& V& I. m) b- i y_data = [58000,60200,63000,71000,84000,90500,107000]( L4 h A* i4 `. w7 J7 F
y_data2 = [52000,54200,51500,58300,56800,59500,62700]) ]; g2 r+ o! j5 \- n1 B" u8 H2 v' x
J! F( f3 {& T# m/ l$ u plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
# v2 X2 V4 B* D1 G plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)& |, V, y! g* I+ C- }
plt.show(); D$ z2 C) x+ |
8 l4 U+ V8 q' x8 e3 U" z5 G 7 \! R" t8 [* u! i9 z) 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 是指标记点,有如下的: - b! |2 B, h3 s+ L8 n- ?
0 k' }# @. Z7 ~" c
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
( |! V8 T7 K. j1 X import pandas as pd8 y0 X) J( \# ?% A9 z e# V
import matplotlib.pyplot as plt/ {' e1 @: p' p( _9 l) l
% I9 s( }1 w* S& {( ?' _
#读取数据6 u4 Y3 D" R; _" X
data = pd.read_excel(matplotlib.xlsx)) {3 O3 z; p" r9 x( F7 k
9 U; E! i: D) S- G6 q
plt.figure(figsize=(10,5))#设置画布的尺寸- z; \1 `5 n0 p6 S; `1 f4 E
plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小' n, e+ c/ v1 T ~9 ~
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小4 ^/ |" \+ y$ {% N* t
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小
1 ~" S1 p( [' N' v$ @" f
3 a4 p- C/ P4 E2 D5 q7 ` #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型
0 l* Z5 S" N8 i in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)
7 P9 O# J# m9 S F' P in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
. t- B) D2 S! Q4 T+ | in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)
! L2 ]: `: \9 _
+ i: F& w* Z X7 O' o plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
3 x" s, b( |4 t) p plt.show()#显示图像
_- O7 K4 x7 }" D( k8 Y0 ]5 z1 y
- s K1 w4 L6 r- a$ t; H2 I/ O
/ F% G: b' S0 U: v5 l 4) 管理多个子图 . A4 V" M$ L/ J' x) Y$ d) D
import matplotlib.pyplot as plt
! S$ D% x! A6 Y1 n2 v" H' o import numpy as np
+ R, I& W f3 p ?5 k* O" J) c import matplotlib.gridspec as gridspec; M2 M2 p/ l( c
import matplotlib.font_manager as fm #字体管理器2 ]4 [+ S( j }; C
: \, M- m6 f+ [7 n: Z& x
my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")) ?, s' M2 O" ^
9 z- \1 ~' |& ~+ v s plt.figure()# @1 @5 l+ U8 x- E
% ?/ W# F+ Y, \0 g) w
x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)+ d5 A3 M6 z3 g4 a9 A
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列$ \) w- Q. b# B) x C7 [ }
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
* L' S* M: m9 ?3 B1 v S! x ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)' S2 b3 A- I: k
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
( o3 P! ?9 h( l0 C @3 I. ~/ g. Y" M+ \7 }& G* X7 ~2 v1 e5 g' j% T& q
#绘制正弦曲线6 G1 ?9 @& C9 j" n0 b2 r9 s, U' F
ax1.plot(x_data,np.sin(x_data))
8 [' K6 A6 x* F) l) l ax1.spines[right].set_color(none)8 U: f+ U1 Y/ ]" d( T; ?
ax1.spines[top].set_color(none)
, ~+ y w7 j( p$ p5 l& X, g* ` ax1.spines[bottom].set_position((data,0))- \8 k* p( r& R
ax1.spines[left].set_position((data,0))
% W) i! y. ^0 ]8 D ax1.set_title(正弦曲线,fontproperties=my_font)) W, J' n5 c5 u4 P3 W! ^6 I+ y3 S
" b: |+ H- |' m+ f" ]
#绘制余弦曲线
* G* R) i6 C; |* O) K5 C7 q9 n- v ax2.plot(x_data,np.cos(x_data))1 t8 ]) }( G, A( C0 v
ax2.spines[right].set_color(none)
' |( z% a) l8 M1 T8 C ax2.spines[top].set_color(none)( f7 X6 F5 K4 Q6 V w0 ^
ax2.spines[bottom].set_position((data,0))
! d' K E3 ^0 P ax2.spines[left].set_position((data,0))2 i F$ E; c+ E
ax2.set_title(余弦曲线,fontproperties=my_font)
; g' E4 O, f+ n+ T9 w9 g; i2 p1 A- h& J: l" t: } J, b: b
#绘制正切曲线# n# C0 Q5 K5 y. V' C7 V
ax3.plot(x_data,np.tan(x_data))% b3 F# E2 e J, d
ax3.spines[right].set_color(none)
2 q# b4 o+ S8 `( i ax3.spines[top].set_color(none)) O( z" c9 @. X- f
ax3.spines[bottom].set_position((data,0))
( @( o+ K/ o( i* }/ p. j4 ` ax3.spines[left].set_position((data,0)) x( T+ `" N! W) l
ax3.set_title(正切曲线,fontproperties=my_font)
~$ X/ {1 F8 g/ |7 M, E0 p7 \ plt.show()
! J6 i. e5 i3 @1 V! q5 J
0 f% g: O3 ]& G: a9 { 结果:
1 t2 E) ~, C g/ {1 S F
* H6 c5 l" ?, a& F. m. z8 g
7 M4 j* A7 X1 B. I e6 V# E& Z- w [- K
& E, D9 g9 h. n/ C) N+ Y8 W3 n0 Z7 E# Y1 K: y% w' N
/ Z( h' s7 x2 h6 k q |