|
, i5 |/ N+ Y$ [9 U2 ?
原创:宋宋 Python专栏 7 c* M) ?2 k1 y* D, F) ]( Y
来源:Python数据分析:折线图和散点图的绘制 4 R' K. B" p) @2 g6 N# s
折线图
! U2 ?0 v( e; b7 F: E 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 ) ^5 |! L7 _( N0 r( S& B3 S
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
8 O3 }' _$ C% d+ y* p4 J& B% y! h 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。
3 n( v( v; c1 R1 [ plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。
! f. ~, c* I( A7 k' M; B" _ import matplotlib.pyplot as plt
7 S4 d7 Z3 z2 y" B$ o) Z
7 R5 S! r9 a8 F3 r, L; F x_data = [2011,2012,2013,2014,2015,2016,2017]6 X8 r; U3 v& v7 ]+ y1 K) C
y_data = [58000,60200,63000,71000,84000,90500,107000]1 G; P3 V" q6 V& R1 {, x" }
3 E" K! D/ h- L
plt.plot(x_data,y_data)
1 N* y" u; O# s) t# B3 a plt.show()) t Q' t3 ]" l% l$ F/ [/ B7 ?
8 ^: s# r, h4 R! m, Q2 k
' ?" W; \) ^+ ~9 Q
2)复式折线图:
3 |( o0 i" I y6 L. Y, x% P+ @ import matplotlib.pyplot as plt# A1 c9 A; y1 N4 K$ T/ i
x_data = [2011,2012,2013,2014,2015,2016,2017]
6 l# o* o/ b2 s y_data = [58000,60200,63000,71000,84000,90500,107000]* T4 U! z" V8 _3 ~& N
y_data2 = [52000,54200,51500,58300,56800,59500,62700]- ]. T; `! z) i7 F* @9 y
! E) |, F" z. v# ], m L plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--). }7 u8 j5 g, b8 `
plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)9 y( `7 V9 u, @7 w! N9 n$ A3 b
plt.show()
0 S4 k2 x* t2 V/ |
0 E" Y. m i" w; q7 W" D# |7 f
" C8 f7 z. f' |9 s8 |2 l 注:说明:参数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 是指标记点,有如下的:
) B$ K+ O3 E: ?* ~9 M
7 _# B* C2 P5 S0 _% P0 c 3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例 ; S# A' e' L6 I! s
import pandas as pd
8 S1 E; o9 n; \6 d" V import matplotlib.pyplot as plt
% y! X1 E! Q. p$ J7 v7 T! P
* f2 O% r" [0 C1 M( _. X5 F #读取数据$ e$ A, L2 u& d$ c
data = pd.read_excel(matplotlib.xlsx)
7 ^ b4 r1 @; f6 p. H+ S3 A* y; r- \1 w- c- T
plt.figure(figsize=(10,5))#设置画布的尺寸' E3 @9 c( l: T2 a5 e4 c3 q
plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小2 \8 w1 M* N8 B5 I8 R6 ^
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小
$ |2 }9 P; G) H7 o plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小5 z0 h& x+ G/ ^$ h2 s" Y
1 L# V2 L2 E" y& w) b; Y1 h1 _ #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型
$ _4 `& Y/ d3 C; C% j7 k in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)
( {3 e# O, o8 [, }) |% h in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
0 ]9 I$ u/ C1 t" C$ q* a in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)
0 W3 e" \: ~" h c; v- a+ C' z; h& w% z
plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
2 B" q$ W5 e3 U" j! T plt.show()#显示图像/ T9 D& u m. f0 X
0 v; _- |! Y" u. m/ T" ?
0 j- R( ]7 |( k" m/ \; \' [" H" |
4) 管理多个子图 * H8 U- i# j0 M( g1 {- v
import matplotlib.pyplot as plt0 {& n1 z) q" m3 [2 X
import numpy as np: p( {6 j0 p" b H
import matplotlib.gridspec as gridspec
P4 \( r& S3 Q' N import matplotlib.font_manager as fm #字体管理器0 ?* T. X/ Y9 g
? V% f; o$ ]# W* B
my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
* X" X' j }7 R( x* t: I; x- g. |3 c+ _3 |6 @0 [+ g! U. i# r2 @0 M
plt.figure()
- @# ~% v2 l0 a: h+ E7 ^
9 {# ~% s& G8 h. V) D* z. L, ^( M x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)7 \: Q, m) C0 S0 @
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列
3 W0 t# r' @5 w0 {- u ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行4 u9 N) y+ X- E, p5 L6 |6 w: N
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)4 o- I; W. a7 Q
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
7 u5 L4 O/ K; }$ h/ x. {* a. x8 a" G% d
5 \! m6 e, @. J3 S% G; `7 r #绘制正弦曲线
+ i; j7 J1 {; e4 g2 t) d" e1 } ax1.plot(x_data,np.sin(x_data))
" W! Q* }) J# _$ t6 E# @( R ax1.spines[right].set_color(none)
) x0 ]( B4 G+ k. j ax1.spines[top].set_color(none)8 B% O9 Y" R, Z# u
ax1.spines[bottom].set_position((data,0))) _- x$ l. @) ~1 l6 }
ax1.spines[left].set_position((data,0))
`7 p5 [4 s+ N2 X ax1.set_title(正弦曲线,fontproperties=my_font)
) X& q5 Q" P7 x k7 ?7 T9 {; e6 W# j
#绘制余弦曲线
, S5 h/ Y* A3 r8 o4 _; W ax2.plot(x_data,np.cos(x_data))
r) C# ] e* i5 S* D ax2.spines[right].set_color(none), U b( s: J3 B/ b, }7 Y
ax2.spines[top].set_color(none)
+ c& ?# Y; \$ K# ]# x5 [" ~: P# ~ ax2.spines[bottom].set_position((data,0))- X7 N2 h4 ^' D! w1 r1 f* ] B
ax2.spines[left].set_position((data,0))
4 ?. L' y' J( [6 C1 _2 a: I* m ax2.set_title(余弦曲线,fontproperties=my_font)! Y% R5 o0 d5 m- _* h" ?
) i* {0 p/ O7 R1 K #绘制正切曲线
. {' ?. `/ T$ [+ S; P' V/ \ ax3.plot(x_data,np.tan(x_data))
1 s* B' g7 h2 E: U ax3.spines[right].set_color(none)( U( n# ^0 E$ {3 \- u" W8 c
ax3.spines[top].set_color(none)2 ^( X" r N) s* {
ax3.spines[bottom].set_position((data,0))
; c1 Y# n4 s T2 S( ]. n ax3.spines[left].set_position((data,0))4 B' p' J; L( e% {3 t" e1 I
ax3.set_title(正切曲线,fontproperties=my_font)7 Z1 Q. w, J7 I& D8 r
plt.show()
! i% A/ s5 C. \' h+ F. m 7 N2 F" `$ V s
结果: 5 p: c; i8 m: Y1 B
' M2 x# h. Y+ m( s/ g5 Y; l " Q1 [$ J' g m6 y- M6 s+ {! e8 o
5 w) P; b2 R* @5 ]
) F2 s3 \# [0 @: X
$ w+ i4 [4 }* ]' y/ J
& v. a8 [2 W/ w) N- T |