|
( s# V" F$ ^9 O F0 T9 d' \1 E
原创:宋宋 Python专栏 ; J) \8 w* M4 L' D( q6 ?6 h
来源:Python数据分析:折线图和散点图的绘制
$ i) L8 T5 O. |0 }( r4 x 折线图5 U1 `6 H$ z S# V! ]
折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。
, R8 ?$ i" W6 d Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图 & I/ t8 g# r7 t0 H( D7 r, u& ^/ [
在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。
+ J, n& l* h$ y' _! d$ k plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。
" b( B: b. K1 S) ^$ y; B4 Q# | import matplotlib.pyplot as plt
0 o4 _/ b% f4 B9 x
% a9 N w' H# K* F! P# F. R e x_data = [2011,2012,2013,2014,2015,2016,2017]7 m1 a9 b! P0 d/ K! a. p2 C( W
y_data = [58000,60200,63000,71000,84000,90500,107000]- {9 |) ]2 Z! Y' F. v Q
8 }& `8 l: p9 X# A- X plt.plot(x_data,y_data)
1 N5 q- _7 I& ?7 ]* a7 \! q% v: \ plt.show()
) v! K) |) P3 x# y" }; l
6 U: S" k& W, }) t* f - [6 b& e$ J# z- p5 |/ n8 [
2)复式折线图:
$ C+ W7 r0 \, J5 _ import matplotlib.pyplot as plt `7 R, b/ ]( m3 h% ^
x_data = [2011,2012,2013,2014,2015,2016,2017]
2 S" h+ U4 Z7 O" f y_data = [58000,60200,63000,71000,84000,90500,107000]
# Z7 h+ L5 Z. T y_data2 = [52000,54200,51500,58300,56800,59500,62700]6 U2 c6 \* ~' ?6 D# E% h. a
4 p3 [$ z3 T0 f$ b! _0 Q
plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
' E' ?1 |& _8 E% \ plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)
; V: O# V8 F; T: p) D6 s! ^ plt.show()
; I$ ~! a4 a8 e " |4 ^" l v2 B; y
q# Z# q! U6 r/ u! p
注:说明:参数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 P/ q x4 w B( ]2 { u# R
2 Y7 N; @5 e4 u
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
/ d9 x" Y8 d: F! m, _+ { import pandas as pd' l: v# r+ j/ e; J. a
import matplotlib.pyplot as plt8 ^+ L9 W8 }+ o- a1 R
% j4 `9 }$ _: B# o- C0 L
#读取数据$ _9 g( L. \- D; b3 f3 d$ K
data = pd.read_excel(matplotlib.xlsx)! U* {+ n% P" |' k
( d+ g7 W6 E/ R% {7 T
plt.figure(figsize=(10,5))#设置画布的尺寸- c3 s: ^: D; Q. p# W4 u) ^
plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小2 i9 b, K! f) G! Y, K' P0 _
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小1 \ d4 E( ~, f1 b& m
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小% D- q# y2 b5 p& {) s \, Y: a
5 f6 B' [* _# F2 D* L* Q #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型; H, x& d. a# c( N
in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)$ n+ |- B) [# F: C) G/ S& t' r( c
in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
& ~) N% m% d9 J( X in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)# V3 t" Q0 l+ k2 {% r
" H- j- f% p# H1 p. ?( w
plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
7 H$ f6 G* C2 \7 g plt.show()#显示图像9 C& i0 i7 |; C9 ?; z2 Q" B
' e3 @: S- C% z; y7 a# n
# I% W' s! T2 i, f: b- R' \1 L l1 w 4) 管理多个子图
9 u/ F! S; A4 _( u! y' V import matplotlib.pyplot as plt
( m6 n1 s0 J' w) o import numpy as np, [ A) P* `% g9 G" o0 l6 t
import matplotlib.gridspec as gridspec
* H' f$ V7 k9 H! q import matplotlib.font_manager as fm #字体管理器! D- I" K$ x5 E( @* C4 u9 z
9 ~% p8 j) i) H; n) Q4 _2 l1 O. ^
my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")" k6 v) Z& u8 h0 c
) P' j2 s- T+ e, v0 ], w plt.figure()0 W( S8 R; k" m0 |: m8 c& |
) g" _" G$ w' u2 L- x
x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)5 U9 `0 y2 m; F7 K, _
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列' l$ w! L2 O. A$ w: i
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
$ Z1 ]( w" ^1 Q! k. W; ^3 `& { ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)
- n% v( }( N1 X, P ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
7 l- }0 J8 _7 X( r; F8 C
3 t' [( q8 F: O #绘制正弦曲线8 Y, L; Q1 G: |0 e
ax1.plot(x_data,np.sin(x_data))% H+ A0 X1 h) Y @0 `- r
ax1.spines[right].set_color(none)
# ?* I! m( o! M5 U ax1.spines[top].set_color(none)& z7 G2 u9 E8 R1 ~
ax1.spines[bottom].set_position((data,0))
/ U- S& D/ ^) g1 H$ K ax1.spines[left].set_position((data,0)). t7 O H! }/ }8 k8 w
ax1.set_title(正弦曲线,fontproperties=my_font)# G ?1 s- R @: H
+ N; ]6 u. J) O K2 H #绘制余弦曲线
$ T+ z7 \+ a2 X7 U3 ^9 k3 a ax2.plot(x_data,np.cos(x_data))% t; b1 Y" [# k: T
ax2.spines[right].set_color(none)
( d+ L8 z: @( n- ^3 s4 { ax2.spines[top].set_color(none)3 U/ G/ O* r4 Z
ax2.spines[bottom].set_position((data,0))" Z/ N2 b+ n k4 [+ w$ Z
ax2.spines[left].set_position((data,0))& s" i. l. T) `6 T f+ m6 ?
ax2.set_title(余弦曲线,fontproperties=my_font): N p* Z7 l3 Q% g& {
3 P" Q) `# Q9 ^* H2 X: j* j #绘制正切曲线$ H1 s4 R, e* r7 ~6 E# G
ax3.plot(x_data,np.tan(x_data))
T+ Q6 Z) N7 V# ?* t( p8 H! g ax3.spines[right].set_color(none)
2 b4 D& R* A/ P) ]( j' W ax3.spines[top].set_color(none)
& m8 i: v# q: g7 |( J" K' J ax3.spines[bottom].set_position((data,0))
8 b( Z. o0 n: [! |1 s ax3.spines[left].set_position((data,0))
* i) m1 O9 s @3 n7 X: h ax3.set_title(正切曲线,fontproperties=my_font)% o% X; b) V3 Z+ Z- e
plt.show()
8 i: M4 S$ E Q* Z/ s! L
% C1 {9 A! m- H5 t 结果: # M1 N/ I, q3 E3 C+ B- H) W
! ^0 \' L/ m; y2 u' e4 u
7 `9 b$ S5 H0 s# r# J
1 G. e; I F6 g# F# @2 J1 u
' n9 S" ]4 h4 h, b) w# Y
/ E$ t$ f6 b: I! ~2 |* G0 V- S2 M9 e/ q9 D) A; ~
|