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

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

[复制链接]
- z1 e- r4 p7 ]/ h+ w

原创:宋宋 Python专栏

7 T9 q% e* _2 o7 N6 d

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

9 \! }1 n% {# L

折线图

1 k" `- N4 b) r, c7 A9 t

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

: g. a1 d9 ^/ r, h* s

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

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

1) 简单的折线图

' @; v3 O% z4 z% J0 f; O+ N& c; ]& c! [

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

k# a0 X0 c0 |4 \

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

. X+ T$ N: C1 ~3 p3 t# K+ F U2 O
import matplotlib.pyplot as plt9 L/ |0 i1 N9 w, e/ { & v% v7 C$ j6 H9 L x_data = [2011,2012,2013,2014,2015,2016,2017]) T8 G6 l, ?5 N, n: I( u y_data = [58000,60200,63000,71000,84000,90500,107000]1 u8 R- i1 Q" a# Q. j / \% k* J( j3 o1 a) b8 x/ S% { plt.plot(x_data,y_data)* E" a9 s" t+ |! Q, p" F3 ~: m1 d plt.show() 6 v" v9 O/ L2 H5 N C
+ t' p( o! l3 s" u
+ b0 Y1 y8 U. ^+ c# D

2)复式折线图:

4 z% _5 x: P( Y3 y7 P
import matplotlib.pyplot as plt3 s$ `/ E/ p& |( k+ j4 G x_data = [2011,2012,2013,2014,2015,2016,2017]- S4 Q! l# c+ g0 K8 T y_data = [58000,60200,63000,71000,84000,90500,107000] : q: B6 X. u3 c- B y_data2 = [52000,54200,51500,58300,56800,59500,62700] 7 _& y% K( J0 Y4 ^ Q+ ~ $ Z( U" y1 c, D% |0 L plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) : G/ A1 `! M, i7 m plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) 8 c- R* ~' h# i& }* z: D- ` plt.show()1 n9 @- P, _9 j" F
$ V& R4 w. _6 W+ l z+ h( B% T5 a
6 n1 ]( o4 ? @4 U

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

. L" }' R! U8 n2 w5 D3 b
1 u% x. s' F! F' X% e5 r- }5 ]

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

! I! P4 R5 v; s5 |+ u
import pandas as pd& C1 h- w7 ~' o import matplotlib.pyplot as plt) P+ s" y8 s6 | / Z! w9 K2 u4 q7 P# j- W- W8 P #读取数据, F( X! H" y$ d6 z( ?" D data = pd.read_excel(matplotlib.xlsx)6 [; ] p2 M8 x/ x A4 d, \) @2 k7 K! e% o, L plt.figure(figsize=(10,5))#设置画布的尺寸 0 m1 I3 s% L- _! c( H plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 0 C9 d/ \& t, Q1 B plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小% i1 S4 \2 F4 ^3 z: {" q. m, M- n plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小: P! s, c7 L" r 4 D5 G9 n P8 f8 Z, ]2 T #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型7 S/ F) ^! e2 t& t! Y# @ in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) 2 }( s3 r1 Y8 B& C( r+ c- L* r in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)3 @" U9 B( R" F; @; O in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)8 o; i% ` Q* S. \) _! J : d' V$ v" x3 C) { \ plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限 ! N9 W) ?& g+ D, t |, Z2 b8 u plt.show()#显示图像 ; Z& S- c8 l, R C5 Y2 q! d
0 A) h! ^6 V D# d9 i" y
/ V* X0 r, S' ?4 N. B1 Q; I, M8 E

4) 管理多个子图

& A2 c1 K7 D8 ?" L7 H
import matplotlib.pyplot as plt / P% i7 v/ k/ a7 x) k import numpy as np$ F. v& S, L- }& ~, Q; h import matplotlib.gridspec as gridspec 4 n2 [1 K) U v2 O import matplotlib.font_manager as fm #字体管理器& U) `( Q" L8 g+ Y7 b: H ' }; f5 _# q9 r9 U+ l9 C my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") 5 ~" x& g" {& ?! k - F! v% _4 [; Q4 \! R- \' ^8 y plt.figure()' h# o6 Z) G3 _8 l ( j! B* _( H/ P/ `8 ^0 P1 ~" P7 S x_data = np.linspace(-np.pi,np.pi,64,endpoint=True) " K4 l! {5 v2 p5 ` gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 % t4 h, G4 m5 I3 w7 b ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 & s: O: g. ]. @, S ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) ) R+ d% ?5 ]- t5 x2 B* O ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)" \8 }( @3 J- }& b; U 7 W2 I5 T! R/ n2 L/ r) L #绘制正弦曲线 1 q: v) a4 H4 E, d( ` ax1.plot(x_data,np.sin(x_data))* [% x$ y0 {2 b, M0 N6 b; b% x ax1.spines[right].set_color(none)6 l, l$ B* m+ {- m ax1.spines[top].set_color(none)6 [ S8 S4 b. a; O/ t ax1.spines[bottom].set_position((data,0))* H- f% y* N5 a9 E- K+ [# `5 h3 g ax1.spines[left].set_position((data,0)) & X# m+ Z" C5 s6 g9 | ax1.set_title(正弦曲线,fontproperties=my_font) $ m3 ?, y+ a$ t/ ~ H. f* B2 ], t4 p" x, j+ j# r0 q0 k3 ? #绘制余弦曲线8 C: [! i5 \) ^( {# }- l) ]8 G ax2.plot(x_data,np.cos(x_data))* O* ?$ T; ]2 b t7 r ax2.spines[right].set_color(none) q( P$ |) R/ b+ A# k1 M5 i ax2.spines[top].set_color(none) ' A7 |6 i+ i% X0 h ~: Z7 } ax2.spines[bottom].set_position((data,0))' q* ^2 t) l/ z% {+ x: d7 o9 e ax2.spines[left].set_position((data,0)) - U: J' Q) ^0 M7 b' ? ax2.set_title(余弦曲线,fontproperties=my_font) ; w& L5 x% d) ]& l i0 f$ f% ~8 n& f6 c7 l! J( u5 c #绘制正切曲线. b) [# g- W; ?+ N0 q; x' K5 x% D ax3.plot(x_data,np.tan(x_data)) 9 `7 @6 m& }( _$ C+ D ax3.spines[right].set_color(none), J# s/ @" a* J7 O ax3.spines[top].set_color(none) 8 g' l3 q7 Q) ~+ ~$ \3 y ax3.spines[bottom].set_position((data,0))* \7 S+ m' ?' l: G9 } ax3.spines[left].set_position((data,0)) 7 v3 K, w- U$ E- o. O# ?$ M ax3.set_title(正切曲线,fontproperties=my_font) % ~8 x9 }; k9 g. i6 r plt.show()7 P& ]8 J; s/ P/ ^# @! v
4 S: F& K; p- `0 c. U) o& W5 `7 {

结果:

. W3 d x. r7 P
! q" o+ d5 u5 p6 ?5 d0 y, |
6 l- `, v4 m. {( `& I! L 7 P* M! u( {7 G; N& A5 A. y8 v, Q & Z; t5 j8 R+ O* r) c ' Y$ k" s7 [- o6 d+ Q& o 8 |9 P2 | D( g( m' b
回复

举报 使用道具

相关帖子

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