|
$ ]. K8 k- {! Y- u- m9 s; A' F
原创:宋宋 Python专栏
3 o- w% X0 W' B7 } 来源:Python数据分析:折线图和散点图的绘制 6 j: T; O% Y! P0 Q3 W0 Z
折线图, e" C/ _5 ^9 r( F! B, R! x1 ?
折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 1 }( ~) @4 ~8 t0 A0 A
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图 , O& l1 {8 N: |* _- f' C
在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 % L3 A Q0 p6 v/ l6 p9 b6 _9 S
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。 : K" o1 y% _4 X1 `) i
import matplotlib.pyplot as plt* Y7 T1 @0 B$ E( h6 t; s
! w8 j$ b& u0 n. g4 l8 T
x_data = [2011,2012,2013,2014,2015,2016,2017]
9 Q4 G! e6 Q$ P! n) o y_data = [58000,60200,63000,71000,84000,90500,107000]
/ |) l# M5 g$ A
6 S& u5 ^9 G6 L plt.plot(x_data,y_data)
* [0 O! {* c9 O: v# u7 S, \ plt.show()
- e. ?) ]& b! A5 f. v 8 }4 Q" @" d/ M$ W! }6 F+ J
, _' t" l. _) i
2)复式折线图:
* l/ ~* e/ u4 k; Y& ^5 ? import matplotlib.pyplot as plt
. d5 {$ S/ [& h- d x_data = [2011,2012,2013,2014,2015,2016,2017]
* s `; W; Q% B$ o y_data = [58000,60200,63000,71000,84000,90500,107000]2 Y" |6 L8 Y2 F5 P: o( k. [
y_data2 = [52000,54200,51500,58300,56800,59500,62700]1 A& Q/ k5 }) t
, i; t" d* h, n5 f# O+ M6 s* z plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)+ ?8 c+ D' D, [( X2 C
plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)
( h/ \2 e+ j5 f e$ c# p plt.show()
! R6 }$ Q6 X# [4 ?! \ 9 o) R! @% d6 U/ u Q) p
g7 w6 O: g `/ q
注:说明:参数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 是指标记点,有如下的: 6 {' J, Y% Q: A$ s8 ]: p
# i/ k% }4 A3 o- b4 s$ ` 3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例 * ^7 J# X @$ ~' N. `7 r
import pandas as pd8 F, k) Q: \! A3 L/ W
import matplotlib.pyplot as plt
1 j0 V2 n/ s0 a$ F \
' \( \4 i2 \7 y% {# G: P #读取数据% u% | m( R$ Q' `8 b: D
data = pd.read_excel(matplotlib.xlsx). h9 r9 p& W) g# c+ d$ v
4 ]1 W3 {" O/ p& c' u; ]" W
plt.figure(figsize=(10,5))#设置画布的尺寸
D2 B: k0 y0 U0 v9 V* \, ~ plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小4 o/ V" g- b) A0 J/ W
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小
- X: ~( |# p5 W5 X plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小
$ j7 a2 P# _5 _6 P6 M( V: }( G* v6 |
#color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型: }0 m3 e# M, Y. S) L
in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)
' P4 L( G8 k3 M1 N" x in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)1 z; I8 H! e1 A6 {+ Z2 P
in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)
3 X3 _4 _ F: o. N9 P! G0 Q1 {
0 g' x2 ^7 \: l/ K' g( Q2 u plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限+ z2 F n7 Q% u
plt.show()#显示图像, u- K( C5 h& ~6 I2 s# i
. c/ O* q' G! v0 W8 z4 O, q! T
, w% d ]/ E/ ]9 ^& `* o
4) 管理多个子图 ) z2 ]9 A1 G* Z" M: n+ b" C
import matplotlib.pyplot as plt
* M' j8 g; G9 E; g; o& I import numpy as np
0 s' E& s% g8 l7 r5 J% P8 h import matplotlib.gridspec as gridspec9 I0 i! t E' g. z6 ^( p5 G
import matplotlib.font_manager as fm #字体管理器
9 ]' C9 Y+ y8 v! J- ]. n/ Z
! _/ J U6 V) P: { my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc"), J) `) x2 F% E p! l5 O( e4 C4 W
, A _2 N* d) q+ @$ p% T U; ^& K: }
plt.figure()
/ a0 e [8 N- ~5 v9 @5 O b+ m/ n! K; e( n; s
x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)
, |& Y! N& E( r3 M2 _ gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列
! C+ m4 T. |1 G ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行. Z) n6 C: S$ Q" e; z& a
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)6 g6 `% E* C6 l3 i$ ?
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)8 ]$ H& U* B! f% A4 m4 N. s4 P
+ `* F" J+ c3 V #绘制正弦曲线
) V% Y' G- S. ~& F; O$ U ax1.plot(x_data,np.sin(x_data)); p9 L- O7 i. ^* W9 i( k# B
ax1.spines[right].set_color(none)$ j% t! R3 o4 y& }2 ]! c+ ]
ax1.spines[top].set_color(none)
9 J( c+ `$ ?( c$ V8 L4 i ax1.spines[bottom].set_position((data,0))5 x) p+ o4 R) h6 z. ^. E, A
ax1.spines[left].set_position((data,0))
- V9 A1 n4 k. n7 D# B- D9 v6 l# E ax1.set_title(正弦曲线,fontproperties=my_font)( O, w6 ^7 |" V1 v: [- V
3 `8 u1 F, {( ?0 X5 j
#绘制余弦曲线
+ a" ~) h- m: k" L% `' O ax2.plot(x_data,np.cos(x_data)). \) y, J) s/ H7 F5 P Z/ j* a
ax2.spines[right].set_color(none)
8 o+ J. G! ?" r- @+ o ax2.spines[top].set_color(none)
- ~4 G5 S) ^- P7 { }( l; c ax2.spines[bottom].set_position((data,0))# m& O, o2 V8 c
ax2.spines[left].set_position((data,0))) Y" m# v0 H9 G/ |
ax2.set_title(余弦曲线,fontproperties=my_font)
9 }! A2 ~8 v* x0 D2 `0 f# b
3 n1 [# S5 h m4 U n5 b #绘制正切曲线6 m( I/ E, X7 b* `! A" P
ax3.plot(x_data,np.tan(x_data))
! m5 ~1 l) W5 P# z" D; a$ N ax3.spines[right].set_color(none)
- z! I. X- z7 d( G1 Z+ A7 ^2 R e ax3.spines[top].set_color(none)
7 O3 A; E1 ^( L0 l ax3.spines[bottom].set_position((data,0))/ e5 b8 w) x% a3 @+ z& }; F, _
ax3.spines[left].set_position((data,0))
; F8 K/ b; v/ A( ~' K5 _ ax3.set_title(正切曲线,fontproperties=my_font)
2 p, g7 Q1 @ k% [% P& m plt.show()! |( \8 C5 A. F6 _$ G
# K+ _ c5 u2 b' h( ~, c- v3 W2 x 结果:
8 _* }5 k# \5 C+ @3 d8 g) n 8 a& Q; B+ \6 F+ Z' ~/ Z
3 r- D d& d8 P
2 ?) H: P9 ]8 k- r
' c8 r8 ], O e+ q9 y' C9 ?) Q# H9 O; D+ i# z$ z: A
@4 `/ f! U2 V' z y* g
|