|
% ?- `: I# K( O- d. u# m+ L 原创:宋宋 Python专栏 $ f" w: \6 _7 d! B3 q
来源:Python数据分析:折线图和散点图的绘制
$ ?* m/ ]1 c5 w( \( Z2 y$ A 折线图
2 t% z7 H- T$ W- f 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 $ |/ d. J# q1 }) X1 X( z9 H
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
( P$ \! d& t7 l7 E& ~ 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。
8 q0 r' E, _6 r: B plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。
8 t" @6 k9 Q' |" y import matplotlib.pyplot as plt
9 ^% {9 ]3 @9 u5 U4 V) I. ], r2 C+ V- x& E" q, k
x_data = [2011,2012,2013,2014,2015,2016,2017]5 m# C4 h. Z3 I
y_data = [58000,60200,63000,71000,84000,90500,107000]
3 S; A( O5 ^- W3 C9 \; w/ O2 G- @$ r* k$ z6 C) p( Y
plt.plot(x_data,y_data)+ G3 G' A) ]6 a1 }+ O1 s3 j
plt.show()
% Z% P s" L; o! ]. F! g* x9 K+ M , C$ D7 f1 p, ]# ?4 I/ R# G8 j
, S, c& N* e3 q
2)复式折线图:
G9 [8 j# u9 @2 O% V8 Y3 F import matplotlib.pyplot as plt
/ m9 u8 d/ }3 P. A/ ?3 c7 j x_data = [2011,2012,2013,2014,2015,2016,2017]
' m; V& S: t3 Q5 z: e y_data = [58000,60200,63000,71000,84000,90500,107000]7 P4 `# Q% P0 f
y_data2 = [52000,54200,51500,58300,56800,59500,62700]6 Q5 U1 E# |( }2 O6 e6 W, l% R }! r
$ c6 N5 {, w% s: W* {) l plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
( d' ^/ M) U* G+ M5 e plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)
3 j2 b7 W+ V: J2 `( R plt.show()
5 v; l+ `" @* }4 } 2 l: F7 Q5 x. P W8 o# Z" W; @% s
" _; h, T, k) K; u( h! f 注:说明:参数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 是指标记点,有如下的: # m8 g% A# r6 K" Q7 |' Y8 {
# h4 P2 s% Y' @& Y& Q 3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例 {- `# M1 |$ K% C1 b( {
import pandas as pd0 O# m2 m0 t9 s7 H' ?7 s1 H
import matplotlib.pyplot as plt9 r0 V4 e2 N4 u6 [
3 E a# p4 o" J0 A5 _
#读取数据2 P6 ]7 j* I+ o
data = pd.read_excel(matplotlib.xlsx)! G: E j4 C- a' Q5 m. h* r- Q! m
3 d" Z( Q: q, t! o
plt.figure(figsize=(10,5))#设置画布的尺寸
# q( n* r# n( B5 p" [: n5 a plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小$ i( ?$ M! R6 K! |5 ?; r
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小: B; J. p. t+ O+ d
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小
8 }2 R4 B) c, U4 I }$ v7 {* \& |' z. v; E" L8 R4 ]' s6 X. \8 n
#color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型3 `0 s% Y6 w" p5 T" d {
in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)
! A; s k% Q+ a* T7 k in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
1 p6 N% F/ ~" r in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)+ Q" ~+ c2 i9 L' t' s
2 ~3 c/ D: b% n6 ]2 E6 k plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
. p0 ~1 {9 i: I r, g& z- k; m plt.show()#显示图像
' H) c& g( z3 Y" X. ^9 n 9 Q6 v7 M% [, h7 {* T3 ]6 ` g
0 @+ \( K' a9 x# o
4) 管理多个子图 , N8 ~; Y# q7 n7 }1 x5 F# C
import matplotlib.pyplot as plt$ e5 I$ W9 `0 i7 H
import numpy as np/ u: ~5 `! {5 @% I! V2 y9 Y# X
import matplotlib.gridspec as gridspec
- t, B+ o6 e: a5 i import matplotlib.font_manager as fm #字体管理器6 m' a' ~! V* m6 |4 F; t
- ?. C3 R" ]2 M$ v) o my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") H Z5 p* q* p# V
# Y& k& n6 o, Z8 Q/ v plt.figure()
. h0 ]' a! ~4 q$ f) a7 g( H& R- q2 r' Z8 ]: f* U6 K
x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)
+ c1 b7 h3 _+ v' q) F. R: p- |. O gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列/ t& p* K- q0 B* q* Q- N
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
1 ~# N" c( d0 t Z8 T5 T" E ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)- i6 c( X: P3 A* k( x
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
, W" M! P/ I, N0 S$ y' w( Y% k2 x
#绘制正弦曲线
4 ?2 S8 ^# G+ x5 s" U6 K+ g# p1 R" Z ax1.plot(x_data,np.sin(x_data))
2 }5 t+ M" R3 {7 l ax1.spines[right].set_color(none)
0 ~+ O# s g5 y: J) T ax1.spines[top].set_color(none)0 D7 e$ J* e6 n/ o0 E$ h v2 H
ax1.spines[bottom].set_position((data,0))
9 X* Y, p$ q6 g$ Y9 Y1 i% E ax1.spines[left].set_position((data,0))
5 \9 R8 y7 J% I7 @& u5 y+ `1 F ax1.set_title(正弦曲线,fontproperties=my_font)
( n: [+ F( J) B* s. [4 W7 b3 d
+ H" s, H' H/ r- F- F #绘制余弦曲线& d$ |: _& j2 r2 g" L$ k+ R
ax2.plot(x_data,np.cos(x_data))
; M. q' m# t! B `9 x- L ax2.spines[right].set_color(none)
, S, g' i+ ?- H ax2.spines[top].set_color(none)% }1 q) l1 J7 D* I U# _4 r, ]
ax2.spines[bottom].set_position((data,0))
: q# U$ q+ a# A$ Q/ H% m ax2.spines[left].set_position((data,0))
& [8 L% B z( X5 o. [3 A ax2.set_title(余弦曲线,fontproperties=my_font). Y6 g) h2 h0 b
7 n9 q4 d- u/ H3 x #绘制正切曲线& T# `5 q/ x% ?
ax3.plot(x_data,np.tan(x_data)): M' E- {! s- E! K
ax3.spines[right].set_color(none): R* p9 e9 Q: m
ax3.spines[top].set_color(none)* a) a9 i, F, ^+ f1 w
ax3.spines[bottom].set_position((data,0))4 B) N9 ]4 D- n, A
ax3.spines[left].set_position((data,0))! M7 o- ^' { d
ax3.set_title(正切曲线,fontproperties=my_font)4 `- f' @5 `$ t7 m) x7 P# |
plt.show()! ]9 F8 M( M6 B: x" W
: D w7 r4 {) K% x$ m 结果:
: c2 s0 Y+ I: y6 w! w! M 3 B/ [ w: @* G8 v2 I
2 V" {5 a9 N2 O! ]
4 l, i& ]2 m ~% @+ i( O
' g2 N" o) e3 q4 C0 ]
. }9 `# y9 g- G7 S7 Y. D
" \; S+ ?( t; g% @0 U7 N8 C+ e |