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

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

[复制链接]
$ ]. K8 k- {! Y- u- m9 s; A' F

原创:宋宋 Python专栏

3 o- w% X0 W' B7 }

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

6 j: T; O% Y! P0 Q3 W0 Z

折线图

, e" C/ _5 ^9 r( F! B, R! x1 ?

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

1 }( ~) @4 ~8 t0 A0 A

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

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

1) 简单的折线图

, O& l1 {8 N: |* _- f' C

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

% L3 A Q0 p6 v/ l6 p9 b6 _9 S

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

: K" o1 y% _4 X1 `) i
import matplotlib.pyplot as plt* Y7 T1 @0 B$ E( h6 t; s ! w8 j$ b& u0 n. g4 l8 T x_data = [2011,2012,2013,2014,2015,2016,2017] 9 Q4 G! e6 Q$ P! n) o y_data = [58000,60200,63000,71000,84000,90500,107000] / |) l# M5 g$ A 6 S& u5 ^9 G6 L plt.plot(x_data,y_data) * [0 O! {* c9 O: v# u7 S, \ plt.show() - e. ?) ]& b! A5 f. v
8 }4 Q" @" d/ M$ W! }6 F+ J
, _' t" l. _) i

2)复式折线图:

* l/ ~* e/ u4 k; Y& ^5 ?
import matplotlib.pyplot as plt . d5 {$ S/ [& h- d x_data = [2011,2012,2013,2014,2015,2016,2017] * s `; W; Q% B$ o y_data = [58000,60200,63000,71000,84000,90500,107000]2 Y" |6 L8 Y2 F5 P: o( k. [ y_data2 = [52000,54200,51500,58300,56800,59500,62700]1 A& Q/ k5 }) t , i; t" d* h, n5 f# O+ M6 s* z plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)+ ?8 c+ D' D, [( X2 C plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) ( h/ \2 e+ j5 f e$ c# p plt.show() ! R6 }$ Q6 X# [4 ?! \
9 o) R! @% d6 U/ u Q) p
g7 w6 O: g `/ q

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

6 {' J, Y% Q: A$ s8 ]: p
# i/ k% }4 A3 o- b4 s$ `

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

* ^7 J# X @$ ~' N. `7 r
import pandas as pd8 F, k) Q: \! A3 L/ W import matplotlib.pyplot as plt 1 j0 V2 n/ s0 a$ F \ ' \( \4 i2 \7 y% {# G: P #读取数据% u% | m( R$ Q' `8 b: D data = pd.read_excel(matplotlib.xlsx). h9 r9 p& W) g# c+ d$ v 4 ]1 W3 {" O/ p& c' u; ]" W plt.figure(figsize=(10,5))#设置画布的尺寸 D2 B: k0 y0 U0 v9 V* \, ~ plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小4 o/ V" g- b) A0 J/ W plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小 - X: ~( |# p5 W5 X plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 $ j7 a2 P# _5 _6 P6 M( V: }( G* v6 | #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型: }0 m3 e# M, Y. S) L in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) ' P4 L( G8 k3 M1 N" x in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)1 z; I8 H! e1 A6 {+ Z2 P in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*) 3 X3 _4 _ F: o. N9 P! G0 Q1 { 0 g' x2 ^7 \: l/ K' g( Q2 u plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限+ z2 F n7 Q% u plt.show()#显示图像, u- K( C5 h& ~6 I2 s# i
. c/ O* q' G! v0 W8 z4 O, q! T
, w% d ]/ E/ ]9 ^& `* o

4) 管理多个子图

) z2 ]9 A1 G* Z" M: n+ b" C
import matplotlib.pyplot as plt * M' j8 g; G9 E; g; o& I import numpy as np 0 s' E& s% g8 l7 r5 J% P8 h import matplotlib.gridspec as gridspec9 I0 i! t E' g. z6 ^( p5 G import matplotlib.font_manager as fm #字体管理器 9 ]' C9 Y+ y8 v! J- ]. n/ Z ! _/ J U6 V) P: { my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc"), J) `) x2 F% E p! l5 O( e4 C4 W , A _2 N* d) q+ @$ p% T U; ^& K: } plt.figure() / a0 e [8 N- ~5 v9 @5 O b+ m/ n! K; e( n; s x_data = np.linspace(-np.pi,np.pi,64,endpoint=True) , |& Y! N& E( r3 M2 _ gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 ! C+ m4 T. |1 G ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行. Z) n6 C: S$ Q" e; z& a ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)6 g6 `% E* C6 l3 i$ ? ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)8 ]$ H& U* B! f% A4 m4 N. s4 P + `* F" J+ c3 V #绘制正弦曲线 ) V% Y' G- S. ~& F; O$ U ax1.plot(x_data,np.sin(x_data)); p9 L- O7 i. ^* W9 i( k# B ax1.spines[right].set_color(none)$ j% t! R3 o4 y& }2 ]! c+ ] ax1.spines[top].set_color(none) 9 J( c+ `$ ?( c$ V8 L4 i ax1.spines[bottom].set_position((data,0))5 x) p+ o4 R) h6 z. ^. E, A ax1.spines[left].set_position((data,0)) - V9 A1 n4 k. n7 D# B- D9 v6 l# E ax1.set_title(正弦曲线,fontproperties=my_font)( O, w6 ^7 |" V1 v: [- V 3 `8 u1 F, {( ?0 X5 j #绘制余弦曲线 + a" ~) h- m: k" L% `' O ax2.plot(x_data,np.cos(x_data)). \) y, J) s/ H7 F5 P Z/ j* a ax2.spines[right].set_color(none) 8 o+ J. G! ?" r- @+ o ax2.spines[top].set_color(none) - ~4 G5 S) ^- P7 { }( l; c ax2.spines[bottom].set_position((data,0))# m& O, o2 V8 c ax2.spines[left].set_position((data,0))) Y" m# v0 H9 G/ | ax2.set_title(余弦曲线,fontproperties=my_font) 9 }! A2 ~8 v* x0 D2 `0 f# b 3 n1 [# S5 h m4 U n5 b #绘制正切曲线6 m( I/ E, X7 b* `! A" P ax3.plot(x_data,np.tan(x_data)) ! m5 ~1 l) W5 P# z" D; a$ N ax3.spines[right].set_color(none) - z! I. X- z7 d( G1 Z+ A7 ^2 R e ax3.spines[top].set_color(none) 7 O3 A; E1 ^( L0 l ax3.spines[bottom].set_position((data,0))/ e5 b8 w) x% a3 @+ z& }; F, _ ax3.spines[left].set_position((data,0)) ; F8 K/ b; v/ A( ~' K5 _ ax3.set_title(正切曲线,fontproperties=my_font) 2 p, g7 Q1 @ k% [% P& m plt.show()! |( \8 C5 A. F6 _$ G
# K+ _ c5 u2 b' h( ~, c- v3 W2 x

结果:

8 _* }5 k# \5 C+ @3 d8 g) n
8 a& Q; B+ \6 F+ Z' ~/ Z
3 r- D d& d8 P 2 ?) H: P9 ]8 k- r ' c8 r8 ], O e+ q9 y' C9 ?) Q# H9 O; D+ i# z$ z: A @4 `/ f! U2 V' z y* g
回复

举报 使用道具

相关帖子

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