|
1 Y( ~% h( S. F, W2 ^' ~) h 原创:宋宋 Python专栏 2 I/ F( x/ ]2 y& L/ e
来源:Python数据分析:折线图和散点图的绘制 1 ^6 A& X0 ~( z( I8 V( | `7 x& T
折线图
- C2 k: ?. r$ K& [- c( ? 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 , e. }0 w, x( U' g& ]9 t
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图
+ i5 b8 @6 R" w; c" s 在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。
2 v. X" Z; C, D" a) Y7 I9 S plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。 / |" q8 m# Y; Q/ [1 s# x
import matplotlib.pyplot as plt
3 i ~! ~! }( C4 D8 O) u
) r! U- Q0 r% @6 Y: d8 ` s x_data = [2011,2012,2013,2014,2015,2016,2017]/ O* g8 S9 b& F% D3 U
y_data = [58000,60200,63000,71000,84000,90500,107000]
& ?7 X) }' O9 q" K2 p/ L3 M+ X1 S1 J/ J1 E
plt.plot(x_data,y_data)
" u3 w, l9 x# p9 b# M4 d' x2 n plt.show(); t! o7 k; X; Z" _
/ z* z4 n( e. C4 I M0 ~6 d }# v: j) }
2)复式折线图:
4 @! ?$ q; W3 e" \. O import matplotlib.pyplot as plt9 _# [, |4 g8 `- L
x_data = [2011,2012,2013,2014,2015,2016,2017]
" {, g! r* ]8 @: g- @8 o y_data = [58000,60200,63000,71000,84000,90500,107000]
% b2 F x8 B* C6 D! d# F2 M y_data2 = [52000,54200,51500,58300,56800,59500,62700]2 u4 D+ u9 s' r: J4 K6 H6 \: [
- `) T ^ o5 B, t7 ~ plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
' {, C* n1 _& H3 v; n0 a0 j8 G plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)! \6 H8 z/ _' y# U1 G2 C9 o4 L
plt.show()/ u9 h1 F$ ~& m- j
; h+ F- I" ?% x
7 H6 s+ m5 u( P8 s) q. \! O 注:说明:参数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 是指标记点,有如下的: 8 c% T4 l: m# n4 ~7 Q/ J$ }4 |6 x( n
. k# l$ @2 `! S; \( G 3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
9 h n" k i/ k: q6 w3 P& ~# n import pandas as pd
5 ~" ^5 l7 ^- W$ H! G! a4 j5 ? import matplotlib.pyplot as plt% Y9 k5 e' H( w) O' z5 [
* @! t O8 o6 r2 ^
#读取数据
$ t" r* g; ]2 b% | data = pd.read_excel(matplotlib.xlsx)
! T- z$ S5 T* L2 H
3 H3 P; g7 P1 a$ @ plt.figure(figsize=(10,5))#设置画布的尺寸
$ f7 t& ]1 c9 D6 u% j% H6 `: [ plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小
c; S: D) K! E plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小
& u! ] I F! @ plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 @: w+ X) r5 S1 M' ~; z8 l( C
1 K7 c2 [' {0 [ #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型5 z' F: s g& G7 y! k, j& q
in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)
! J3 Q2 p/ f& G1 S in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
9 h7 V7 P& J) ~9 q x) O$ z in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)
( z2 n. q- d0 f0 h0 U% ^. k& |2 w" p! U; s) q- I
plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限
" O6 X* o$ _' W& }1 j; `& e8 k2 _ plt.show()#显示图像
* _; W. F) \' @% }9 X4 A ; h6 R: S. f. V) a4 Y- b
5 p2 K, B0 u3 @
4) 管理多个子图 + J4 ?; C4 ]( H4 v8 B2 i
import matplotlib.pyplot as plt' H; T/ g1 X' [ D
import numpy as np
" M2 X# \8 ^$ y# H X import matplotlib.gridspec as gridspec$ i+ l+ [. K* w7 B
import matplotlib.font_manager as fm #字体管理器
' F# {* {8 p# B. ?
4 g3 A$ L. e- h$ c+ B my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")' D* v/ l9 M) w1 g/ E
% M* h5 m5 g T C plt.figure()! Q& z) Y* ]+ @* B8 N2 f
" s" l. |6 A6 ^$ d x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)6 t, z* _6 u, l9 b
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列7 Q7 v+ K1 H, ?8 x
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 @* F. B2 ^9 ?+ L
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)
; R: W2 P, t& @ Z9 f+ Q6 y ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3), B" x8 A; c: v4 j. d: M k
$ y. Z3 g0 l1 i2 B/ z
#绘制正弦曲线$ y% O7 K8 n. b% x# S" U
ax1.plot(x_data,np.sin(x_data))% H' u: f3 o4 O" ]8 a9 m
ax1.spines[right].set_color(none)
, J) R: ]0 F) H" u9 D( j2 w/ B ax1.spines[top].set_color(none)2 y( P& _. M% }9 \0 `" z! `% A9 m3 C
ax1.spines[bottom].set_position((data,0))8 w# k# k- F+ V9 Y2 l5 m
ax1.spines[left].set_position((data,0))
8 P4 z/ _! r, y! U* i/ o+ |/ M ax1.set_title(正弦曲线,fontproperties=my_font)
' U) z1 d: t) J4 | a/ b
/ H2 v: w3 |, R& L. v2 T% b #绘制余弦曲线
7 E; G( `+ V- J5 R- b ax2.plot(x_data,np.cos(x_data))
% u3 \' b% _1 D% G ax2.spines[right].set_color(none)
& p! n( i0 r/ @- U- g8 S ax2.spines[top].set_color(none)
* \+ K4 t/ }/ @' E/ C. b ax2.spines[bottom].set_position((data,0))1 i$ k( p0 M4 U) h( l. s4 p
ax2.spines[left].set_position((data,0))% M7 B* U: ]* i
ax2.set_title(余弦曲线,fontproperties=my_font)+ D, D9 t3 C X7 t F
! [% {. d2 R# K/ z; B! E" B
#绘制正切曲线
# {# E7 }1 E$ `7 r ax3.plot(x_data,np.tan(x_data))/ T; e. Y* A2 y# |1 J: J
ax3.spines[right].set_color(none)
k' G' U: T% X- }3 M! o0 ~ ax3.spines[top].set_color(none)+ C6 V- l6 Z! H6 f
ax3.spines[bottom].set_position((data,0))
2 P5 R5 T( q% z5 a5 f. O) A4 h# X0 D4 f ax3.spines[left].set_position((data,0))
# t0 P, C- r1 g' J, x9 x/ b( R ax3.set_title(正切曲线,fontproperties=my_font)
. q4 c: @' x& E plt.show()
- G/ Z, g2 R5 g4 s% N
6 e7 c- u @& y- I 结果: , g) i' Q: b% F$ L$ q
9 F& X0 S1 [3 w/ Y" m% d) v5 j
0 U& ?& @/ K% Q$ f4 Q% b4 h
! M- ]3 x9 G! M: w
" p. u; ^6 H, x% O) h. Z
) z6 m* `( A4 _" Y) F5 |+ [" I$ Q
: Y0 t& \# ?2 J# Y/ u3 A |