收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

Python数据分析:折线图和散点图的绘制

[复制链接]
5 Y& c; G( e& H$ @

原创:宋宋 Python专栏

; z' W3 C% X9 G& j5 d

来源:Python数据分析:折线图和散点图的绘制

- Q0 Q( O K- i; @+ W0 Z: B! `3 g

折线图

: Y2 v4 S7 b' H

折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。

# J H- e4 t' Z1 Y3 L( s) G- T; U

Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下:

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

1) 简单的折线图

' D' K7 s- o' f* ~

在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。

5 t# a% B8 p' v4 w$ @; @4 }1 Q: Z

plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。

0 _( p+ ^: T, o7 q2 Q
import matplotlib.pyplot as plt" |/ K1 w5 a. T8 O! ~5 d2 H 0 f; s' R7 |/ n( r3 e2 H$ A x_data = [2011,2012,2013,2014,2015,2016,2017] ; P6 R2 T+ f/ r% h2 m) H y_data = [58000,60200,63000,71000,84000,90500,107000]8 p6 x2 b3 l# C; q1 \' N " f) D* d6 y( v; Q( C plt.plot(x_data,y_data)! s3 y' x6 ], q" H* f P& [; q plt.show() & c& D9 O" L0 P) o- o: t/ E/ F
4 n. a2 ]2 z) }$ E1 M/ P3 d
# ^5 _ K% i0 `! d# f

2)复式折线图:

+ i) ~8 p# _. N0 p p3 Q
import matplotlib.pyplot as plt; Z8 y2 L- k+ i! y) N! G: ?0 n x_data = [2011,2012,2013,2014,2015,2016,2017] $ R' k. K. L, [% k# F; x$ Q3 O# x y_data = [58000,60200,63000,71000,84000,90500,107000] ( D. E b' s1 ]8 Y" |5 H- a: J y_data2 = [52000,54200,51500,58300,56800,59500,62700] 1 l) W7 X5 k# f7 a) f8 x1 J" P- q# X1 O 2 B: z# d; e. H$ d% ~. I* t1 M plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)/ ]& c" Y o& A. {* G. M& W4 H plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)6 C$ \1 q! b+ d' t+ ]8 J+ e plt.show() , n6 e7 F* s3 F$ J3 g1 l
* Z3 j4 N3 e/ G$ O, G: K( V
; N% |7 a- G3 y& y6 F: m

注:说明:参数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 是指标记点,有如下的:

! v+ k- I( J8 ^- B
/ f5 R7 v& E( d2 {: d7 z

3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例

2 @' x' A$ s" U% z Z8 }1 S
import pandas as pd$ A9 |; T4 A+ a2 ` import matplotlib.pyplot as plt, y% E: [+ }& |1 F4 T3 a9 W( l * _/ K- F- M7 S ^& p6 y) _ #读取数据 7 n6 f! [% r. ~' k s* J data = pd.read_excel(matplotlib.xlsx)' Z- \ I4 }9 e9 _7 w 3 _7 Z* V+ j* u ^/ Q T( G1 d3 Y plt.figure(figsize=(10,5))#设置画布的尺寸 " w6 f# o! D, m& Y1 [ plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 y9 c% G* }0 O: R) Z plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小 5 X' v7 T" ^- M+ {+ {$ X- y plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 3 L" G) Q% n$ Z5 g9 L * }7 J$ `. B' v* i9 H8 j2 O8 ] #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型3 ]' n1 L2 Y4 N/ z( ~ in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) ) a$ B. |# N# R6 T in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)8 w6 y' h1 ~, s c8 N/ a& K in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*) : X8 a3 D% R# }, I) v, S) p: c. A. X# C5 [- ^" @ w u plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限 6 ?$ m9 `! C* J' b, {& ~7 ^ plt.show()#显示图像+ c) f5 i+ u: P7 W5 O8 g" \2 k6 W& X1 ^
# @0 w! Z$ b# t8 b" h* f
- X7 _" G- c. r$ C: D5 V, V

4) 管理多个子图

0 ~8 |: J, [8 F0 R
import matplotlib.pyplot as plt/ Y8 E: J# P8 {" }+ `2 d% `% x import numpy as np! \1 W5 D9 N) S/ Z' }, ? import matplotlib.gridspec as gridspec ; X! N. n/ G! B& {4 J# Q, H( d import matplotlib.font_manager as fm #字体管理器( G3 N. i" V. a7 o7 g( z2 A& H) u5 ?- [ . _5 i# i' W- g. k my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")/ m' d4 U9 v2 v9 y$ @7 T6 {9 Q5 m ! u/ G; }9 @6 h+ u$ h$ w plt.figure()7 b4 g/ d4 r1 A/ z$ K \* G, H0 O3 h+ N: a1 w x_data = np.linspace(-np.pi,np.pi,64,endpoint=True) * B. a$ }4 P8 z; p0 J gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 4 r% O9 @/ s2 D4 a2 O- ~ ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行- L- e6 d+ f" m1 p- R0 ?( y4 o ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)& Z7 n: P1 K" s% m) w ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3), L' o1 F' w, t/ m" a" {0 R: t # M8 Z& ?( T: N3 s #绘制正弦曲线 0 r6 [* A2 X; w# L5 z ax1.plot(x_data,np.sin(x_data)) 8 Z% k: f5 B- Z: J6 a4 l& ^ ax1.spines[right].set_color(none)# h9 x+ ^3 P5 @, P) q6 m ax1.spines[top].set_color(none)( c- _1 _ Q7 {7 w ax1.spines[bottom].set_position((data,0)) 7 }* Z9 B' p( ~) M% i* N/ s ax1.spines[left].set_position((data,0)) 3 |( h8 Y p* p8 i* A% j ax1.set_title(正弦曲线,fontproperties=my_font)) k- T7 r+ L0 d% a. i 5 J' Y" o6 g/ @2 `) J" s #绘制余弦曲线: F6 F! [5 f" B0 s. h( m ax2.plot(x_data,np.cos(x_data))$ a5 z, m' d2 w. L& [8 s ax2.spines[right].set_color(none) % H) ~3 @* Z" b* @8 V ax2.spines[top].set_color(none)( p$ B) ^. y& N% M7 q! v8 g6 B ax2.spines[bottom].set_position((data,0))" f% L+ l, O! X/ l ax2.spines[left].set_position((data,0)) + L5 d: \9 A" G4 V9 v4 j( W* ^, K ax2.set_title(余弦曲线,fontproperties=my_font)/ V( A) L+ E6 f) v' R: t 4 ^8 C/ P, J5 l" n6 s% a #绘制正切曲线0 e1 E) Z% ?$ O! d f; B# o5 j* D ax3.plot(x_data,np.tan(x_data))) X* D0 {, m% Z& p ax3.spines[right].set_color(none) * q+ O" I, S$ Q. W' } ax3.spines[top].set_color(none) & h9 Z; i0 n* Z, e8 }, g ax3.spines[bottom].set_position((data,0))& s. J5 G; u! T q! U! W+ ` ax3.spines[left].set_position((data,0)) 0 b( R5 @8 U: z/ q% a6 c& i9 | ax3.set_title(正切曲线,fontproperties=my_font)$ v ~5 i$ Q6 \( Z) w) m' s' T plt.show(). z! S N" Q. g3 {) q1 T6 T- ?2 m
# t# h6 i4 Q2 k" ^4 P

结果:

, i( C% S" f" [5 a
1 }2 p; j% n/ r# Q- @& ^6 w
; B$ f$ T" r+ X8 I* ] ! M8 w' t2 d! d# J: D. M- Z$ ?% a0 h! p" v: c - ~7 d9 v" N( z) z4 C2 u/ U 2 c0 s b9 g/ x
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
伪丶笑
活跃在昨天 00:52
快速回复 返回顶部 返回列表