|
/ R$ s0 T" K7 \# w+ V: l
原创:宋宋 Python专栏
/ `, E7 K3 l. V( p3 {, A1 G 来源:Python数据分析:折线图和散点图的绘制
1 w% P# L9 Q1 o# s 折线图3 B, y x' X" g0 X
折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 6 R8 }8 P1 O: B% T0 `( W" a
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
v& I* k: ]4 e7 i) J+ x 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。
& N# |: o5 W+ I4 c plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。
# }/ a" \. s# V! @4 m8 F+ ? import matplotlib.pyplot as plt: W' x9 q9 r" |, h8 D/ t" O! z
6 Y( q) x2 m- k% X6 ]+ E# y: e& [3 { x_data = [2011,2012,2013,2014,2015,2016,2017]
2 q4 H* }8 D! d" B: Q i, s* D1 E y_data = [58000,60200,63000,71000,84000,90500,107000]& [; a! d# y4 S$ [, W7 U
/ a4 X3 \' A0 N# `0 F+ [ plt.plot(x_data,y_data)4 M1 v Q5 l. i
plt.show()
2 f2 J8 y. q% S0 _ ) d4 ^( n% e& A4 X5 Z @9 E0 E
& W/ s+ V t! l' T: v 2)复式折线图:
" S: f" ^4 Z6 C5 e import matplotlib.pyplot as plt
1 U3 x( c4 P, W x_data = [2011,2012,2013,2014,2015,2016,2017]
9 M, h' Z3 d& Y6 ]# n y_data = [58000,60200,63000,71000,84000,90500,107000]
* l# P2 L2 U8 S0 e7 a) M s7 V y_data2 = [52000,54200,51500,58300,56800,59500,62700]% k; k; }0 y" ]7 D
W' ]; O- v2 W7 k }
plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
" T" A2 ]- l8 {3 L/ U1 x plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)3 F/ L0 {7 z) ~4 K* d( z
plt.show(): X0 X/ ], A- j
. g* ^6 |# ?* u! N 1 j! z0 r3 r: J) ` c
注:说明:参数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 是指标记点,有如下的: 8 H1 Z* A+ o& p* J' t h2 h
$ ^6 f) X. P" K3 L, ]5 w# `
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
" x( `' A% J, l9 K. m6 `* }! ] import pandas as pd
/ V. l$ L2 s' T/ A' @1 w D3 x o import matplotlib.pyplot as plt
5 f% ?% S! p7 p9 Y1 X$ F; W+ h& }/ I( W- Y# U5 }' V
#读取数据
! t. x; ], X* |; [ data = pd.read_excel(matplotlib.xlsx)* q3 G9 ^; c" r* z G0 f) S. Z
0 h7 y6 @) T* n- R; j# U! M, s
plt.figure(figsize=(10,5))#设置画布的尺寸6 @* m4 {3 ~! [# T6 ~& O
plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小3 o% S$ ]# I- h9 f- F) W
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小
c) P0 P! r* q4 V% b- N; R; r' X plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小
) J/ b# E! D, w
% H8 a& H: @# b$ @5 a #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型$ {0 A$ } ]; |+ N1 W- j
in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)
" I7 t2 T- g1 n9 v in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)1 o3 Y( U% l: Z1 F. b5 y
in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)4 h4 n0 ^3 t9 g+ |
# c9 P. `- R- L/ F/ C2 f$ @
plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
7 [6 i; F+ J! C- c4 {" B9 H: } plt.show()#显示图像: r/ G8 [0 f0 A w1 ?
4 ~& J! D% S9 D% ~3 ]% A% R ( ]1 `$ L% r8 l+ [) R# _3 U3 d
4) 管理多个子图 3 y9 ~" X) r3 P1 P5 b, |. b# i
import matplotlib.pyplot as plt
% b! y$ V0 r% W' d import numpy as np! J ~4 ^; B+ \# o! ]8 X: ]. @
import matplotlib.gridspec as gridspec
) G" o+ o$ W3 g5 | import matplotlib.font_manager as fm #字体管理器& O+ x( k3 t0 }) |( i1 `6 v
5 P( |, v( [% K4 j! s+ ^5 H
my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")0 p, e- y y) z
q2 \, a' W9 o6 z+ b$ X
plt.figure()
; v& ^- \, H; U* R- m. x' \$ T
/ I }' D) L0 S x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)- x* U9 i3 x/ N O" e. C
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列
. ~/ _4 i- ~( u/ g, C ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行$ B! l' Q+ O2 K7 ^
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) f' R. `5 H5 z" f3 E
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
3 J L+ [1 L. J3 a
" ?" B7 b( C& Q6 r7 C #绘制正弦曲线
& x4 o2 O/ L1 i% o' ]! m% \3 G4 ` ax1.plot(x_data,np.sin(x_data))* a6 l) c1 k# H
ax1.spines[right].set_color(none)
+ A; o4 V3 }7 b) \ l5 D ax1.spines[top].set_color(none)
6 d1 ]" C$ }1 P8 q O, E8 O ax1.spines[bottom].set_position((data,0))
7 u) B0 F, P: n6 I6 f' b! \) ` ax1.spines[left].set_position((data,0))5 j8 |7 e. ?8 W$ y* p2 Q8 v5 [
ax1.set_title(正弦曲线,fontproperties=my_font)
' G6 v$ ~- @/ ]* j5 J O
0 W! G8 ^: R1 x. H/ ^& |$ a2 K$ p #绘制余弦曲线. M$ J& d D6 A6 j: M3 j0 U
ax2.plot(x_data,np.cos(x_data))
) x) F5 m+ m+ {& F ax2.spines[right].set_color(none)
; @3 W8 E7 w6 M' D3 g3 T/ O( H ax2.spines[top].set_color(none)
3 z% {; o$ f f- S3 s0 E) U4 U ax2.spines[bottom].set_position((data,0))( Z+ i1 J$ b( _( F# e
ax2.spines[left].set_position((data,0))
1 ~5 H4 M# ]% u9 d; i ax2.set_title(余弦曲线,fontproperties=my_font)" x5 z. w+ b/ Z6 p% q
0 [ G i0 k, Y9 [6 {, ^
#绘制正切曲线. g, w$ {& V% U* x/ d5 I
ax3.plot(x_data,np.tan(x_data))
L# E$ N+ c* Q" z( _- g ax3.spines[right].set_color(none)7 r- i8 a- r6 t
ax3.spines[top].set_color(none)1 u( ~2 M) ~& v6 c0 z
ax3.spines[bottom].set_position((data,0))
; U0 m/ Z4 U9 @& _! L( C ax3.spines[left].set_position((data,0))4 `2 q& y% s9 y$ `' S8 k/ @$ V
ax3.set_title(正切曲线,fontproperties=my_font)- h# ?* @2 S( T8 C
plt.show()
& H5 ?8 D! {# l* g# Q
6 O$ k9 Q6 O! i& L5 i# |& [ 结果:
3 C$ P/ z# ^) `
; ^; K( r* h4 B' I 7 T7 ]4 }# \- B" ?1 A' `; t
" a# H* m9 R( g! J
/ e# R! }% K8 Y3 y. k+ Y. R/ A+ ^/ o0 b. J- x$ j. [
+ _& ?& j5 z! G& I. I8 y* w |