|
' r- H7 ~9 q: Q! }) Z 原创:宋宋 Python专栏 7 |, X5 Q5 k4 ?/ w4 m
来源:Python数据分析:折线图和散点图的绘制
/ {; t1 E* W1 o1 e 折线图9 Y: ~8 W4 A8 o3 M! X
折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。
/ B& o3 @( I; J N& C, W* M Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图 - N4 \( g) u1 V- w4 Y1 a4 D
在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 - c9 ]- U. j+ y; x; Z7 A) m* d
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。 2 x/ R3 i. w; Q( D7 D0 ]" q9 d
import matplotlib.pyplot as plt E7 N- z4 {: g5 I; d
6 ^7 c) Z7 n, D. X5 w# ~ x_data = [2011,2012,2013,2014,2015,2016,2017]
" N- Z: a8 a; e8 j0 W1 W$ {" q y_data = [58000,60200,63000,71000,84000,90500,107000]
- W2 I! i* K7 Y0 O P3 \( n' s
, ]0 l N$ y: B5 k' F plt.plot(x_data,y_data)
5 z& N' Y6 b- A4 d7 \1 M2 T* b- L plt.show()+ C2 @4 G3 _# m. t: X5 p
8 |: H7 H- T0 U$ A' l- [4 G $ s+ X5 }4 I N+ }
2)复式折线图: % r5 U D1 }, O
import matplotlib.pyplot as plt
2 K! b( c" j- h' Y: o6 G- D0 R x_data = [2011,2012,2013,2014,2015,2016,2017]
9 M( }( H$ e! F7 r/ D8 h) m y_data = [58000,60200,63000,71000,84000,90500,107000]
T# i( M; {/ X. J/ i y_data2 = [52000,54200,51500,58300,56800,59500,62700]& k, D7 @: n2 ^( ]
2 J' P. W& ]; K$ r; C) \
plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)7 ~. o) D. o5 O# T
plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)8 ?" r! W" V- z8 [
plt.show()% ]" i; n! F9 G
% D: D9 y: x6 `" v/ } P4 N* ?
2 K5 I5 [- t6 y 注:说明:参数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 是指标记点,有如下的: 2 M2 a" c6 F" x) f$ `# g. q
, D i8 w# g, h
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例 5 J" s/ u/ d( ^7 b& W0 _
import pandas as pd4 F2 Y$ G& }- p- K" A& g
import matplotlib.pyplot as plt- J4 P" P' Y1 q5 s1 {
9 ]! Q$ z% R- L- o0 n0 j; P
#读取数据* @; m$ E* j( S( P7 |
data = pd.read_excel(matplotlib.xlsx)
0 M6 Y' Y6 z+ m5 w
( i, |7 y5 g/ l8 j, R plt.figure(figsize=(10,5))#设置画布的尺寸
- L! {, l6 P' n3 ?8 a! `% } plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小
+ s. P& g, B g$ [$ P( q plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小7 R' ^" U+ c* n" W3 [; O6 G( ?
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小
1 }* C2 @2 p: b& ]/ v) \& b
5 T, W2 h; ], u! I! u5 Q' x8 \ #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型
% S3 P- Y. r) k. h* `1 d in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)- q& V/ S# l: {1 ^" Z% K
in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
; o! q: C3 u0 M( o N# @: f2 n, `' @ in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)7 R' T1 Q8 R/ Y2 z2 e7 }1 C
) L( E! I; A1 b- [! R* Z* [! Q plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
y7 E2 r" D; p7 P6 _ plt.show()#显示图像7 T) P) d9 }8 Y. z; J# t
7 m [% [" m/ i$ J6 P' l6 \ 1 |0 P5 l' f6 N- K! U. b( t- J3 I$ s+ n8 t
4) 管理多个子图
8 ]) k; D2 u6 M/ L import matplotlib.pyplot as plt
% j1 q' m) h* l. K4 y8 X& t8 x7 d import numpy as np5 D$ _1 R' @5 F3 Q! K3 E% f
import matplotlib.gridspec as gridspec
) d* Z. E$ n4 b( j* q import matplotlib.font_manager as fm #字体管理器$ X/ q. {6 f% m2 O
7 S/ t$ }* l' j" z+ R my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
$ D2 a. K- _( W G% L, Y$ ^
% `( A& x7 Y' U plt.figure()' R; y& a8 U4 L8 q! v; c
, A# }4 E$ h, k" s1 S4 ~- D
x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)& D- j: V1 D) A, x
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列
2 G0 y! q0 |) i% S n" N, R+ e9 a( B ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行9 B- | ]; ]5 |4 h
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)
: M) i% X4 `' P6 M- b; L3 ?8 d# k& G ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
- b3 ^1 v8 B' z2 Y% K1 Z8 r
8 z/ b5 T- a: ` #绘制正弦曲线
: O+ f% e0 v9 q+ b* E: ?8 v5 g ax1.plot(x_data,np.sin(x_data))
- c$ j1 l8 H# C+ G2 F( G5 m ax1.spines[right].set_color(none)
G( ^6 j4 K2 ^/ [ G ax1.spines[top].set_color(none)
* a1 v1 s. c) n T& L; M1 W ax1.spines[bottom].set_position((data,0))
* S0 o ^! @+ M$ r% e2 }2 Q) x. ] ax1.spines[left].set_position((data,0)) z& m. ^" q4 P4 C% ]3 ^# S% n
ax1.set_title(正弦曲线,fontproperties=my_font)% y1 z |' J! _7 t0 j
$ c* R# ~6 m8 A( L8 n
#绘制余弦曲线; x9 s3 X" l6 _$ Q' R: x) T3 N) E
ax2.plot(x_data,np.cos(x_data)), D* C% |, H6 M, D6 [4 D
ax2.spines[right].set_color(none)
! ^2 @; p1 F; C5 H ax2.spines[top].set_color(none)
/ X+ p5 v0 X" d6 T4 N* u, h4 W ax2.spines[bottom].set_position((data,0))$ I$ d$ A, Z- t( o: x& t. P5 \
ax2.spines[left].set_position((data,0))6 `: d3 Y* g* k( ~6 X. j% B/ T
ax2.set_title(余弦曲线,fontproperties=my_font)
* p- O; t% V' L8 D2 `; S. h+ R- I: a" ]1 c' e1 Y* B; t. O
#绘制正切曲线# i* E# l( w5 p, Y) g7 _
ax3.plot(x_data,np.tan(x_data)) d+ G% o: t. B& _3 `
ax3.spines[right].set_color(none)
! |* ?7 w4 u- c( ]% A ax3.spines[top].set_color(none)
, {4 w6 I* d. u ax3.spines[bottom].set_position((data,0))) k, G5 B1 H- s9 u
ax3.spines[left].set_position((data,0))1 U% F0 ?: l) P: ?2 u9 Y3 s
ax3.set_title(正切曲线,fontproperties=my_font)
- K1 D8 P2 n6 f) p: V R( } plt.show()3 B& R- |$ A' i" i6 O7 s+ K! q
% N( o) P- U! L; O
结果:
6 @( a! w8 |2 t4 l/ M0 d 1 P- C; H" \( S% R" q. W$ I
) a! ?; I! G: s+ C- ]8 B1 K" u
0 a8 ^' _8 p+ C+ x* w' O
, A; J [2 h" P5 Q% {
/ L% G0 j4 s2 p) M6 N8 v. j) A
4 B7 z9 R, a- b0 [4 u& P. [
|