|
0 `5 q3 T! m! U r4 Y8 _7 y
原创:宋宋 Python专栏
5 `- g, O1 R8 [3 d$ A 来源:Python数据分析:折线图和散点图的绘制 m& ^( f b# B ` Q4 J& t }) r
折线图
1 k6 c" N% \. d3 G& L8 _ 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 / c0 p% o4 v: g% r3 v# @
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图 % E `9 ?, W3 S7 A
在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 6 r; A. s6 `% e1 |# S4 g6 D. H, @
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。 2 V) _" o1 ~* a% i" j7 G2 Y& @- ~
import matplotlib.pyplot as plt
+ R6 b, t1 |; g4 L& k$ |( Y- `
! b4 o N- a9 P% G$ ^ x_data = [2011,2012,2013,2014,2015,2016,2017]
: ~% c( v* P& _* @1 G$ T; A y_data = [58000,60200,63000,71000,84000,90500,107000]
4 O4 w$ Q$ e& t- `' T
. d }7 S# }) W$ A/ u3 X plt.plot(x_data,y_data)9 h# m1 ~5 _& E6 K, @0 Z
plt.show()
# I+ D. r# O; Z: R' v& n; l8 ~ 8 y9 }" ?/ V+ C/ g- Y* z I0 s( t
4 E! `9 y; o% C) m. V$ {1 _ 2)复式折线图:
! D" a1 z' s0 C, |( M1 q import matplotlib.pyplot as plt
2 _1 K) L& M2 h; o- S x_data = [2011,2012,2013,2014,2015,2016,2017]
- q& S# m, E+ E. Y3 u5 z y_data = [58000,60200,63000,71000,84000,90500,107000]' Q; N# O' U8 i( ^0 y
y_data2 = [52000,54200,51500,58300,56800,59500,62700]
' G9 l- j5 o: S
# E* M2 x5 r; E" k0 b plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
! _% J8 l% B% E4 f# `& b' h0 p6 z plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)
D3 E1 V6 w* }- w plt.show()) h y' F0 G6 o
1 ^' l; u7 ~, r4 P
4 ?7 ^9 k) o3 ?' w* M* |$ E 注:说明:参数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 是指标记点,有如下的: , f) W7 T4 K8 c" u
# l8 R# e9 a y/ Y
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
' L5 Q6 w+ S u# B import pandas as pd$ A9 X% ~: t: e$ |# d
import matplotlib.pyplot as plt+ y% n2 ~7 I. `/ l
( P4 n T0 j2 X1 e
#读取数据
1 X5 ~% I5 H) G, p: V! F1 p, v( e data = pd.read_excel(matplotlib.xlsx)
7 Z' p3 {- l) b6 z, b
* z) J. v3 G& A% ]) P' q3 D9 o plt.figure(figsize=(10,5))#设置画布的尺寸% [, ~0 T& V* U3 S- z
plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小; L1 O2 T. w* {% O \: Z' T; R
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小1 ]9 t: ?/ s* r# @
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小
! j5 _: D4 p/ ]; u7 g
) h& Q9 L1 F" p #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型8 X: q1 b+ W8 {/ H- q+ s. ]
in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)3 c- U5 }; i* i8 A9 ]& C
in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
* i% O b/ e+ a) A7 l" J. U' N% Z in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)3 L# P' u0 O. o; `
6 p0 e+ f' [- ^" ?/ \* W
plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
0 Q( N8 {. V* F/ @6 t plt.show()#显示图像
+ N( W+ g2 P3 a! Q# X% u+ {
: D, X4 e1 s Q( q! U; Y/ f0 c 9 e) N$ ^' i. e: K( b3 F& i7 ^
4) 管理多个子图 ! d( v+ b3 {) A) F5 K
import matplotlib.pyplot as plt" |$ l" `& I; R m# B& p
import numpy as np2 T5 x5 @; M1 Z# u1 l
import matplotlib.gridspec as gridspec
, h. B4 ^: t4 m3 b2 u# a import matplotlib.font_manager as fm #字体管理器: ~& G0 a% }5 J o1 P6 |! I8 ~
" \! |) ~) l3 v# C my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
9 P1 O) n0 A5 v5 R0 _
6 `1 W9 ]; N' { plt.figure(). {, Y" V5 x7 S0 ]! W
6 `2 h3 M# I3 Y x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)# N. t$ V0 f6 |- {
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列( D( f7 i! [" m) {8 i8 w" E
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
1 g0 k* n' z+ O4 S( p ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)/ n- o1 ^" B8 [$ |1 T
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)/ t. F" o' Z- q! a, p8 u9 `* x
6 c7 b& L7 b" y. O/ [6 e8 \& x) \+ b
#绘制正弦曲线* l1 s+ @1 v! `2 R; F% y
ax1.plot(x_data,np.sin(x_data))
) M) L! S# H2 z' _ ax1.spines[right].set_color(none)
8 K# i b9 ]- }2 t- h: v ax1.spines[top].set_color(none)( I0 W) t/ ]$ p( P2 s
ax1.spines[bottom].set_position((data,0))
! K! c- ?9 {3 N5 H) @: v) M& F ax1.spines[left].set_position((data,0))
) L9 r: x0 V7 y8 H1 l7 G ax1.set_title(正弦曲线,fontproperties=my_font)
. {3 {# d0 M# [8 I: N) ^! E
- S/ y0 q: {/ Q! `/ F# t #绘制余弦曲线
' X. T! o& _; F5 ]( y. s& `3 M ax2.plot(x_data,np.cos(x_data)): U% n( I0 ?% h7 a! p
ax2.spines[right].set_color(none)
) {2 a9 \- w- M' h+ e4 o3 g% S ax2.spines[top].set_color(none)) R) X$ o$ Q* g# R( Z
ax2.spines[bottom].set_position((data,0))
* n' j% j) E Q- G. v ax2.spines[left].set_position((data,0))' u [" g, |& `6 |' J4 Y
ax2.set_title(余弦曲线,fontproperties=my_font)* K) j& L6 B8 d5 V
e; I4 a# S% t5 j* D
#绘制正切曲线5 H8 m( N4 O d+ }7 R% G) J" Z
ax3.plot(x_data,np.tan(x_data))
! b5 q# R$ [5 L' b ax3.spines[right].set_color(none)
; V$ E- t" J/ r+ L! F ax3.spines[top].set_color(none)
# k* x# v% m! u ax3.spines[bottom].set_position((data,0))
/ l- M" d( @# E( Y ax3.spines[left].set_position((data,0))7 S% Z: _ T$ _8 {& g& ?! u2 x
ax3.set_title(正切曲线,fontproperties=my_font)& ?$ {; M' z/ O$ a
plt.show()
; ~- ^, E# d# v
3 P5 \. ^ h+ z+ r0 `$ K 结果:
5 O- c, B! E A* J9 t4 N
# l7 a# ]; c R( I+ Q- \; `# q
n2 J2 j' V3 }
a" q0 _& ]- }; `+ ^5 ]) L$ N5 }+ b2 T7 `4 p
0 b6 W! q0 H7 U# s Y& W, ^. P; {
9 \0 p" R+ J# e4 R9 `0 X |