. Q+ N7 {3 F$ o
原创:宋宋 Python专栏 $ N2 n& a s% @6 Q6 h! J
来源:Python数据分析:折线图和散点图的绘制
5 C% P& b& m7 Q5 g$ Y) i; y, H 折线图- C* P0 g+ O1 p- T
折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 6 O( W- z' x- K' H- ~% n; U
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
- t0 z5 J6 p* w" q 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 ) W4 D/ [7 ]- Y
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。
% }. \8 h- y, a' u2 Y a& t, l5 v" W0 r import matplotlib.pyplot as plt. e9 k3 N' ~4 p3 |
* o# Q; P( w7 s9 h4 }+ |# z/ `7 x x_data = [2011,2012,2013,2014,2015,2016,2017]
% A* f) {0 V1 e6 _ y_data = [58000,60200,63000,71000,84000,90500,107000]9 m& K( D1 s% t
- S& u0 p' K: s
plt.plot(x_data,y_data)9 F$ n) h: p0 A9 B" l/ Y' [
plt.show()
p% n( ] a8 H( Y6 g - y- B# ?" F6 V: S
8 g/ O1 U, r+ X& }, [! P 2)复式折线图: 0 t7 b7 h0 O1 A% `. D* ^ t- G4 i# E
import matplotlib.pyplot as plt6 e! V" o T" N! P. p
x_data = [2011,2012,2013,2014,2015,2016,2017]( g) X- t1 I9 T2 m6 b7 p+ I! q. s
y_data = [58000,60200,63000,71000,84000,90500,107000]& F* `& i( E, m5 b- y/ ], S
y_data2 = [52000,54200,51500,58300,56800,59500,62700]
2 j' m, q% u2 [* @- {8 H; T' N3 p9 m; h- N3 ~- v2 V
plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
& e7 u; M; u# N1 p) a/ t. \: y. o* r plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)" c2 W5 J9 K/ N
plt.show()
6 m6 i& {; @, o
4 L7 t# C9 b% d3 y3 C/ } ' L, C* U1 l4 r! q9 R% r
注:说明:参数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 是指标记点,有如下的:
" {4 Y5 m% g7 T9 r0 W . \8 N4 @" w3 f) t& X$ {# }
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例 . B8 c5 f! S: p+ a- d R. J) h8 ~
import pandas as pd
" V' L }0 m. Z+ }- \. H5 I! P, S8 _ import matplotlib.pyplot as plt4 O( k2 y2 C+ \2 p
; H/ D* Q4 N8 C9 ~ #读取数据3 [8 Q; o4 o$ q2 H) B9 u
data = pd.read_excel(matplotlib.xlsx)7 m+ b b9 U0 ?8 \( g
( z2 f2 @4 v8 y
plt.figure(figsize=(10,5))#设置画布的尺寸- ^2 K9 d2 w: g% `+ n" z3 |9 U7 E I& @
plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小
) t! Z, ]6 \, A3 B7 c3 U) R& f# U plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小- v+ v0 j7 X0 L$ k7 H
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小0 z( f* q4 g C _% ?6 r: X
; b0 p4 _: w# j5 [
#color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型
7 {! B( }% Y% Y in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)/ W6 v# k( E* F
in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+); p4 v- }' Q% E' H
in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)' g! m; G$ ~ r, J+ G1 H
2 Q6 ]: O9 j9 y! n. i plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限1 s$ Q2 h, M% o! G% b7 N6 p3 \
plt.show()#显示图像
; t: P7 u1 f$ |0 w# C( R6 o9 C 4 k6 N% `8 E; g6 e- i4 x
7 x' p* n$ T7 e6 W# N 4) 管理多个子图
! C5 B- m+ g- J1 G import matplotlib.pyplot as plt
& h! h# ^0 A3 d' I3 M: g/ f import numpy as np' P1 R6 v8 D+ _% Y; m
import matplotlib.gridspec as gridspec6 z: w; |4 I# R7 E! G# ]
import matplotlib.font_manager as fm #字体管理器
- o4 _ k( L1 \7 C L+ c$ [* h
8 a: Q8 j. l8 p' B my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
# f8 W8 G; b. \6 t: V4 [ @1 i
9 c3 b4 Q) w, c m" e plt.figure()' z) u8 p, ~5 W( o
+ F' {* W# ^$ ]$ H x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)3 Q: Q; a: d; P2 @6 y* |$ }! g
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列5 ^& t# Q: N* q: `' ~% z! U" ?
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
0 L7 g- G- q4 w% K7 ] ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)& D+ i0 X9 u; T2 c( I; o! k5 K0 u2 [
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3); U: b% [. Q9 F% p
5 X) X. I- W0 V4 q7 l. w3 ^ #绘制正弦曲线2 ?- C$ S* c$ j" B5 L% [
ax1.plot(x_data,np.sin(x_data))
* @. ^1 G3 R) V4 k: i ax1.spines[right].set_color(none)+ o, k* W$ H% L1 j
ax1.spines[top].set_color(none)
1 @6 ]! p( Z; W4 M1 m1 A ax1.spines[bottom].set_position((data,0))
. O3 ]- N8 P9 R) O1 ` ax1.spines[left].set_position((data,0))
7 ]3 D' N- Y- E7 U# D# O ax1.set_title(正弦曲线,fontproperties=my_font)8 e5 m" \0 R8 \8 J
& _" J! m2 B% _ #绘制余弦曲线8 A0 ~' ~6 V: C
ax2.plot(x_data,np.cos(x_data))9 A2 g5 X) l3 G. C
ax2.spines[right].set_color(none)
3 z: E, i+ _" R+ Y$ z. W ax2.spines[top].set_color(none)
- _ f3 {5 W/ R ax2.spines[bottom].set_position((data,0))( s2 N* p# E+ D$ P0 v
ax2.spines[left].set_position((data,0))4 C+ S- ]/ ?0 B1 ?) F7 E* A
ax2.set_title(余弦曲线,fontproperties=my_font)0 x" E% ~6 q ]9 B6 Y
+ s* i3 ~9 B) }, I" Y4 T$ U
#绘制正切曲线
0 s- h! P7 k: U. d2 e* w% } ax3.plot(x_data,np.tan(x_data))
% S+ f& A5 S( ^+ M% T ax3.spines[right].set_color(none)
$ h6 I, w8 g+ K- X a, J ax3.spines[top].set_color(none)* f& t" S7 m) Q- r* |$ z
ax3.spines[bottom].set_position((data,0)). K- T5 g O& T
ax3.spines[left].set_position((data,0))
1 h6 q5 I4 S6 j/ H ax3.set_title(正切曲线,fontproperties=my_font)+ o( I! v. P! q6 [- a
plt.show()7 x; K! N y3 B! ]' H& G( p
?1 ?% I) f, [4 s" `" ]0 a
结果:
" K; S2 s, p S- [" [" B0 e
% Z5 X9 z. ]5 G
8 s5 |( G9 Z4 x% }/ q
9 A6 x, d2 y/ O7 E$ y
2 I6 D' P( l$ [" n
# t% h* O3 j$ Y; s* q4 V2 G& p# G
- @, O& j" b% w. Q4 y L$ V; F& f |