|
; n7 f* x/ ^# G( d, z 原创:宋宋 Python专栏 3 k1 z" y b6 W. ?* G2 U( f
来源:Python数据分析:折线图和散点图的绘制
- @! M" L7 m# Z: W7 Y 折线图
& w: n, f, a) q3 _* g 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。
* d! p h; D& x5 M Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
9 ~5 Z% e E6 |* R: R8 ] 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 ; B N7 t7 _2 l# I
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。
- R2 w# G6 Q/ @7 W. r import matplotlib.pyplot as plt
" E }, K [+ I! Z+ M; e! N/ |& Y" \
x_data = [2011,2012,2013,2014,2015,2016,2017] o/ [4 p: Z0 F2 d7 D5 E
y_data = [58000,60200,63000,71000,84000,90500,107000]" [3 }1 B1 x& C# y
4 J5 e% L* C: B* m plt.plot(x_data,y_data)
/ H6 _4 M' V1 y" a }7 O0 N* M3 S plt.show()
4 N7 C5 B( v/ o$ K" m r' m : k& w1 O& \7 ^3 J8 z
' |: J6 p9 C$ k; O
2)复式折线图:
& f' |( t+ j- Y% u* T import matplotlib.pyplot as plt
; m$ S( ?6 t; ` h x_data = [2011,2012,2013,2014,2015,2016,2017] H( G( Z8 j) }
y_data = [58000,60200,63000,71000,84000,90500,107000]' n' O7 Y3 W# [: n0 e6 M
y_data2 = [52000,54200,51500,58300,56800,59500,62700]
0 b6 i. o; K8 d& J. @' e! H& y$ P( z3 z4 T9 d1 Q1 V" |
plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
9 c6 _# T4 P9 Y plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)4 n& ~) Z5 R/ L1 f
plt.show(): a2 x8 k" [2 r8 U/ {! O, w
3 i7 q2 y- P, k: h, I) n9 ?& ?4 a
4 v, K6 z# C9 t 注:说明:参数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 是指标记点,有如下的: 9 `; D6 c8 S3 ^( F0 Q( P v6 j
8 X. z' m6 [: \9 l3 o 3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例 M7 u: O: M5 [' E' f0 J& }6 s
import pandas as pd
# X! x3 K, f9 {% k7 | import matplotlib.pyplot as plt" [! E9 _9 D* D) z$ O6 _% ]1 [2 j$ S
`" ^; f, p0 l# s; a #读取数据/ ~8 v/ g+ l& E# P
data = pd.read_excel(matplotlib.xlsx)5 U, Q7 k }) N: D$ Y7 I1 l: N/ A3 l& T
$ i( ]9 c# C$ v: O plt.figure(figsize=(10,5))#设置画布的尺寸
- E1 A# a6 v- L# q' | plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小
1 x: v% `8 m( Q plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小/ Z: I! o2 K7 [+ T1 s2 P
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小0 V$ Q- y9 i0 i' o; Y8 A* N$ @
7 o$ T4 I) S7 c: e0 s #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型
: N6 p! S, q- B: g. d8 e- E8 G in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o); n+ J: Z; z( c- j7 V
in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
2 L3 J4 B( x( `4 C+ U% b# X in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)' l. J) b& F2 |. N7 Q9 x
% D) O* O2 C+ j, H plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限* K5 Q* z& }$ v( ^' f4 ?
plt.show()#显示图像9 H) |) l/ e. n. {. j0 A
& {& X3 T" y2 |$ Z# ^ 9 | b4 s2 x6 G# @4 t0 d3 r
4) 管理多个子图
Z+ D9 B6 `9 o2 m4 u1 i import matplotlib.pyplot as plt/ h$ {; \, \; n7 ] D- S" d
import numpy as np
" S) e; l2 l6 ?; w import matplotlib.gridspec as gridspec
1 N& x8 G; Q" J1 E% `& \$ ` import matplotlib.font_manager as fm #字体管理器
( x1 {5 s8 P: }9 B! A! E- |; i: J% U5 P4 Y4 J
my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
4 i/ {2 b, S) ^9 m
4 c1 f4 Q6 M) V* ~( S plt.figure()
$ l+ C5 t; F% G8 W
# I+ I. C L+ N3 S2 |+ f4 ^ x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)5 u! N8 w& L9 o5 c- B; \- K j
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列- p, B* d `) {: {) k+ G4 a
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行" v$ W) r3 u: s% b
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0). J# n. b" o* t+ s7 ^( N
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)& |9 }; v- U/ A2 B! D7 \
& [- i9 I& ~+ U- M; K' [ #绘制正弦曲线0 x7 C' w+ s; R5 I* V8 ?5 J0 N
ax1.plot(x_data,np.sin(x_data))
, x% W! L. E5 G% @- }0 N ax1.spines[right].set_color(none)
. i6 c, L; s: N. x ax1.spines[top].set_color(none)4 C+ ?3 ?0 `% \8 l8 |6 s
ax1.spines[bottom].set_position((data,0))
) H: ~0 }+ l# | ax1.spines[left].set_position((data,0))
J& p$ T A5 l# k: |; A ax1.set_title(正弦曲线,fontproperties=my_font): k5 v) u5 M. H3 _ A' P6 [
! M6 i8 O7 k, A* P/ ?6 O
#绘制余弦曲线
" s9 c/ z2 D K( x ax2.plot(x_data,np.cos(x_data))7 g3 X$ C. b$ U+ X1 P1 s1 A
ax2.spines[right].set_color(none)
5 N/ v0 Q# A7 n3 W ax2.spines[top].set_color(none)6 d% Q3 q( ^2 l- u
ax2.spines[bottom].set_position((data,0))& C% J1 J# X- N r, b& o1 `( N. c }
ax2.spines[left].set_position((data,0))" h+ Y: v6 \7 l5 q I7 x5 f/ B0 l
ax2.set_title(余弦曲线,fontproperties=my_font)
! _8 I' _5 v7 F! p
' d, o( w0 K- v6 _$ Y% n1 a. P0 M #绘制正切曲线( |$ A( x3 g; C2 G6 g# _& V
ax3.plot(x_data,np.tan(x_data))# t2 i/ z! ]5 i4 _7 r* x
ax3.spines[right].set_color(none)
, T G- h6 V0 w% u/ ~9 k ax3.spines[top].set_color(none) ~0 ]3 v: L( k- C1 g7 K# E
ax3.spines[bottom].set_position((data,0)): {4 d. g5 U* G- F' S0 H
ax3.spines[left].set_position((data,0))4 ~) U0 j; q! F" P; q
ax3.set_title(正切曲线,fontproperties=my_font)
+ B* d3 h# J% u e T. T/ { plt.show(). Y. v7 p" |6 ?
u4 |: j3 m) F' J8 u. L3 V" |+ \
结果: / X6 }. a! i" }
3 r; Y- { S0 X. D
& ~9 V& ^& l% m+ b( g" j# v3 J1 V) O: g' N+ v# N5 w: J9 c
9 d4 C0 ~8 ~6 M
# R- A4 f0 h5 F% u* G% V
1 l4 } q" @: \' ^/ _$ H! g! Z |