|
. _2 v* H0 N7 e
原创:宋宋 Python专栏
! R# W8 n0 j$ [/ y9 I 来源:Python数据分析:折线图和散点图的绘制 7 G' u \7 o3 M v
折线图
, r' L. v# t r; _9 M& @ 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。
2 p; y/ f+ p" h/ G& n/ J: G( K Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图 $ l) |. {' j, ~# W$ l7 P) l
在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 6 \' y( N8 R6 `* ]6 `0 X: f5 O5 i* D
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。 ! k6 r. e8 w/ ]% M( b" ]1 q
import matplotlib.pyplot as plt
: _& p% L+ g! j/ l. E
, A4 s8 c! Z9 L8 I b; P x_data = [2011,2012,2013,2014,2015,2016,2017]) f7 t+ D7 g" A+ V
y_data = [58000,60200,63000,71000,84000,90500,107000]" i. ], I) j& a' `
& H6 Q8 g! p+ ^) m. k8 G: g plt.plot(x_data,y_data)% P3 ]& X8 v) b/ M. q! e
plt.show()9 g }. J7 w# j! i1 Z5 ^
* e0 R; H( T! f$ E& O m, B; {
) h1 n5 y$ V. B& @6 |+ ?4 V 2)复式折线图:
' W+ x" Q; N) a- ?7 R6 v$ f q) a& j import matplotlib.pyplot as plt
* A. h4 M' a, z! e7 L& Y3 E a x_data = [2011,2012,2013,2014,2015,2016,2017]) V1 y7 b6 w$ z5 g
y_data = [58000,60200,63000,71000,84000,90500,107000]
$ p$ w. u+ G2 [+ q" I# B. H- o8 { y_data2 = [52000,54200,51500,58300,56800,59500,62700]
! u, D$ F3 [$ j0 \) R
5 M7 K, z' n9 U6 t plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)5 `4 Z0 }6 F. e: \6 b/ c
plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)
. F1 m$ o" \2 M- M& M" e0 [& x plt.show()
. t" U/ q- m2 {0 k6 b; I
* B i; l# b( i8 u5 Q7 H( J# Q 9 e K- X3 C1 S3 t1 _& m
注:说明:参数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 M" B$ O+ |3 _, Z+ h
; I& G0 u2 M. r. g
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
/ K* s5 T) m* n7 h import pandas as pd
% }& ~" G( [0 F9 x/ r import matplotlib.pyplot as plt
( `: }' T! E! a8 _! [* L+ ~9 `% |0 [% j. P7 [& W/ Y
#读取数据4 m/ O q, m O3 W2 [
data = pd.read_excel(matplotlib.xlsx)
4 a4 s4 R6 f9 Y, H
, F8 s: ]7 b. I4 F" b plt.figure(figsize=(10,5))#设置画布的尺寸# A! E) r" V: s5 D: x, L5 z8 I
plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小5 _- Q- a) C+ ~# L2 D7 \5 N7 e
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小
; y* f3 b* v1 \* e2 _ plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小+ G$ h/ b5 ^. G8 x/ H( ~1 Y, J" a
9 x$ ~; V5 p) _7 J/ e) C #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型
& u$ Q3 j1 W5 q3 @: t, E5 N in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o). |( u6 J3 `& m
in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
9 {$ [( a" {2 r& ^* | in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*); s$ X; w# D# a0 b; w' L
2 ]# p8 f0 m% Z
plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
1 m, r: n0 H4 M3 | plt.show()#显示图像, `7 ~5 k( r/ o9 a7 K7 H
0 |8 e+ u; J4 L2 D " }6 s8 i2 I, O9 w6 @; h( p
4) 管理多个子图 - W* p$ _# h( w
import matplotlib.pyplot as plt8 }5 q; G6 F! x: X b1 S
import numpy as np3 a2 M; U$ }) H: R5 m% D
import matplotlib.gridspec as gridspec$ r" t. M# n8 a: r. H
import matplotlib.font_manager as fm #字体管理器( I7 `' F0 G$ l
' R4 Z; u6 h4 m9 I4 ?) {
my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
- S& _& [/ s% ^! I) ~
$ T; ?# _6 G6 u6 r: c7 c4 w/ q8 p plt.figure()
6 X9 i1 s9 L g: U: |- I7 @* \* N2 h8 L) X
x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)8 e0 X- ^9 ^+ `8 ]: b; m" G2 Z
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列
( d4 g: ?6 F8 F7 q& Z ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
' C; a+ y( ^9 ] ~0 C7 c/ F ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)
, j+ M6 e* N& N7 r1 F9 n; j; m ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
z& _# J+ M* g$ Z& r* z) h
1 A( Y J* ]% X" O1 g# w #绘制正弦曲线( i; c, u) N. o; R# N+ }$ o5 U
ax1.plot(x_data,np.sin(x_data))) \5 K* s' o" p1 H& g! ]: J- ~
ax1.spines[right].set_color(none)
( S0 l( ]* @7 i$ W ax1.spines[top].set_color(none)
0 Q2 G7 x$ O2 C2 F' ^8 ^' O2 ] ax1.spines[bottom].set_position((data,0))
0 C' }! ^6 C; H1 _ U ax1.spines[left].set_position((data,0))! w4 p) H# z( X4 d8 i* {
ax1.set_title(正弦曲线,fontproperties=my_font)
& a8 J, p0 ~3 P8 [; a* U& {! f: P: C5 r. t4 c6 W: ~
#绘制余弦曲线! z! Q8 K7 _9 n" W+ T
ax2.plot(x_data,np.cos(x_data))0 n8 d3 Z0 w. \. C" z3 {' I
ax2.spines[right].set_color(none)
! z% r$ C; [: x" } r3 _ ax2.spines[top].set_color(none)) [! G, d7 V6 X' b1 Z
ax2.spines[bottom].set_position((data,0)) a1 } N# ?" I, b
ax2.spines[left].set_position((data,0))# d2 X3 `& K3 |; E9 g+ [
ax2.set_title(余弦曲线,fontproperties=my_font)- D9 }/ O9 y* r# B4 y
( G) d% ^, B" c0 M
#绘制正切曲线8 w- W- P O' W( B
ax3.plot(x_data,np.tan(x_data))
8 U1 W; _ ~; P7 ]0 y ax3.spines[right].set_color(none)( n& {. K8 z6 z* q/ o
ax3.spines[top].set_color(none)4 l4 v- ~1 o9 v6 t) q
ax3.spines[bottom].set_position((data,0))3 q1 Y4 b" y( b
ax3.spines[left].set_position((data,0))
- G& x7 U( F! w" Z0 c, K/ w2 t$ @ ax3.set_title(正切曲线,fontproperties=my_font)
( P& B! q' }2 P% o2 u9 m plt.show()+ ^# E. i4 d; B5 f9 ?
& ]9 |' e7 O2 B! o, n& f& s 结果: ( r, y1 V5 d- j7 Q" T' w7 a
1 S. @7 v- j. I8 a , s* q( h" k: v! J
( M2 x' y7 j/ @3 s6 h/ Q5 j6 R( i. t( y. [# l1 h$ J: b7 n
$ U' s. ]( h* {9 z( B7 b5 G2 V& {9 [% a) I1 f1 F) C1 d- t
|