|
6 E' D3 y0 p4 q; u 原创:宋宋 Python专栏 9 U3 V9 H" z9 ]. a* R+ y6 t
来源:Python数据分析:折线图和散点图的绘制 0 Q, E& A3 N4 a0 X, P) J
折线图
% \. N. J) p; Q, I- A 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。
9 T8 F1 G( u5 F! A Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
3 E; d: ^9 h( B2 v9 ]# f 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。
* _; G% x" M/ _8 p/ s) { plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。
/ X% J9 S1 R7 C) E import matplotlib.pyplot as plt
5 U& M5 y. G0 u1 {6 g$ ~
2 G/ V' W3 _* K2 ?0 r+ M% q x_data = [2011,2012,2013,2014,2015,2016,2017]: ?3 c$ r' b2 M$ P9 @$ n/ W
y_data = [58000,60200,63000,71000,84000,90500,107000]
# O, Q8 P9 K q4 X( `0 R! p: ]' N+ ]1 `& i( N
plt.plot(x_data,y_data)' C# l; B1 R0 P5 B' j e& u' r1 L
plt.show()
7 X+ u0 o) b4 ^9 Y$ I% K
* E% @) _7 G+ L: H$ g0 {
# Y( E' C( Z* ] 2)复式折线图: 5 Q) U" o) {2 O$ g
import matplotlib.pyplot as plt5 ?3 H7 \$ X$ ? [8 O
x_data = [2011,2012,2013,2014,2015,2016,2017]0 q% f! g, M9 e- l& Y0 O& l
y_data = [58000,60200,63000,71000,84000,90500,107000]
% h7 M, n. K( P9 z' }6 B) X2 {9 e y_data2 = [52000,54200,51500,58300,56800,59500,62700]
0 e7 }) q& Z; K0 I, {
" H) f7 o3 A& @ plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
) d# K9 J1 p' z% W plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)0 Y% |8 J; ?0 c/ a; W( Q( v3 K$ \; g
plt.show()/ n6 s1 B* i* d! \$ k
* h$ |% H4 C. O, `% S. I0 _
4 ~3 H/ r: D9 c% m0 y d 注:说明:参数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 是指标记点,有如下的: ! p/ R1 e& V; X" v/ Z
" t& o, R5 C b/ G+ }2 m
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
3 b. g4 {, g+ M F! I import pandas as pd+ N, X, ^2 |6 w! {8 e
import matplotlib.pyplot as plt7 @1 ?* k4 ?" f
# x% t0 M* S; \ #读取数据( J' \6 N; Z7 n3 L7 z9 B
data = pd.read_excel(matplotlib.xlsx)
; L% b1 {, q. |# _1 _% {1 B7 T
# Q$ j( a, o0 N ?7 w plt.figure(figsize=(10,5))#设置画布的尺寸
" \3 X5 r+ T& n! ^: L plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小
5 ]! l3 M' j) w) u* k plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小. \4 T$ S' S* u, K( l; U2 }8 p
plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小$ S1 R+ \2 O! w
; {' v: O0 ^7 E. A; k8 A5 u #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型
1 j4 f1 R& M0 B h5 @& Q6 v in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)- U4 [- ]% @1 q) M* I/ p a
in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+): _+ U: w( _4 N2 D O, I+ t
in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)& Y' i, g- @4 q& m9 v
: [' S4 \" H; k4 i plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限- w3 `( ~% F3 ]- o1 y
plt.show()#显示图像
" X1 w3 c5 I6 ]" B8 U+ W) E ! y, N4 j% i4 A# [* I0 B
9 K1 T+ B% u4 l0 K 4) 管理多个子图 ) I# z s# D6 O% N: j% U
import matplotlib.pyplot as plt
s+ u1 \7 y+ J3 l: I import numpy as np* T8 Q; {6 |4 `* T9 a% q
import matplotlib.gridspec as gridspec
0 a5 Y7 [, v/ m% l( v! p! z import matplotlib.font_manager as fm #字体管理器
6 s# Z6 H% y g9 ]. N; V: ]! m: }( u& W
my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
$ Y, f1 D: k! h% p: n7 _, F- m
4 M0 C3 L* `- o3 e$ d ]4 v plt.figure(); I. a% ] l0 \8 [& I7 {) S
6 V" }% V& w( e7 u3 \3 b7 x1 U) p- N
x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)
/ c5 H; j4 o" ] gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列8 x) w" q- f9 U1 c" x
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行, c7 ]/ m* Y, i5 Y5 I
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)
8 h b" I' e& O. f" k: u8 S ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
9 |! D7 p& ?8 Z& F1 z9 \" P7 J+ p
#绘制正弦曲线
$ {* V: N9 ?0 n1 u: _ ax1.plot(x_data,np.sin(x_data))
# M+ T& x. a( P3 x# x ax1.spines[right].set_color(none); M! C: W8 z3 U4 V5 ]) k5 j+ l- o
ax1.spines[top].set_color(none)! B1 W1 {' V3 g0 h$ E
ax1.spines[bottom].set_position((data,0))
8 v0 ^* s& _. @ ax1.spines[left].set_position((data,0))9 {3 L4 _' U' Y* {5 s) b
ax1.set_title(正弦曲线,fontproperties=my_font)' Q; E' [7 r6 F$ |1 Q7 f
: y5 V/ \0 ?" m4 J: H- J
#绘制余弦曲线$ `0 {3 R* @% v2 e; g$ B7 h
ax2.plot(x_data,np.cos(x_data))
6 u, S+ Q/ l, S% C/ J ax2.spines[right].set_color(none)* G! L$ b! Q r1 _
ax2.spines[top].set_color(none); m4 B/ [# ~6 g' {' u
ax2.spines[bottom].set_position((data,0))0 u( \! i% l! j; i( x! h
ax2.spines[left].set_position((data,0))) L4 w- w- X' g9 |
ax2.set_title(余弦曲线,fontproperties=my_font)1 M% D, Q2 i5 k# n& n4 H+ f
) @0 c* n- |+ ] #绘制正切曲线" n; v. m# C2 o9 j0 _$ i+ _
ax3.plot(x_data,np.tan(x_data))8 P1 b8 z* T/ V/ Y1 u. g
ax3.spines[right].set_color(none); q9 ?" E0 n* E! E5 b8 ^
ax3.spines[top].set_color(none)
9 u; D2 z; z; i) s$ l ax3.spines[bottom].set_position((data,0))4 [1 E9 p, B' x8 F3 E( [4 M
ax3.spines[left].set_position((data,0))& v: a# ?# N" N& m( t/ W) R: i8 r$ M, f
ax3.set_title(正切曲线,fontproperties=my_font)
0 `( C7 t' n, I) _1 e plt.show()) H; I% Q1 l2 W* W( V5 v
1 v9 V: F; p- q8 U 结果: ^% F& `4 z0 {! K' x
' U$ U8 @$ W- _" q2 d3 v1 H
. o* T* ` j5 F3 x% R1 S0 p+ D# n5 w" z; Q' w7 U+ Q
/ W% C* _" g4 a! z. B1 F0 ]2 |" P
- X' q" T1 i' u. @
( X$ ^" A4 f, G6 w+ ~1 ?% b |