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

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

[复制链接]
. S) i+ D8 n4 m

原创:宋宋 Python专栏

8 v d+ [) ]) v9 g h) `

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

4 d! A- F: J' l, O, d3 f

折线图

( ~0 g# w* \* Z) @

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

3 b3 V8 U* R! f3 e

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

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

1) 简单的折线图

% ^4 \0 b! k% T) z

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

* z) w1 @: i3 }, d* I8 i% Y" P, f

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

9 Q5 V& n$ P2 o Y
import matplotlib.pyplot as plt" l) ^9 N3 z8 ?4 l( y ( M$ E' C3 W& m+ ~3 p1 w" X x_data = [2011,2012,2013,2014,2015,2016,2017] ; ^: |2 \# d# ?% X9 T y_data = [58000,60200,63000,71000,84000,90500,107000] 5 V% P5 c# ^' C7 i. b9 c8 I3 @/ W6 w: H# \: W! A! ]+ B plt.plot(x_data,y_data)3 Z' B. S$ s* I. t' a8 w A plt.show() % [1 a1 @- T, m$ p# r: a
2 | m- M" ^ t4 G4 n1 F; ~9 i
" h3 E. P& H) x7 v

2)复式折线图:

& x9 n5 S" i9 t4 m8 r
import matplotlib.pyplot as plt - u4 k" Q8 [& d+ `5 E0 V5 U3 E+ ` x_data = [2011,2012,2013,2014,2015,2016,2017]4 m' }" b0 b- @- U/ A y_data = [58000,60200,63000,71000,84000,90500,107000], c( O3 m; X" {% J8 _' A y_data2 = [52000,54200,51500,58300,56800,59500,62700] 8 i: U, D- m8 B( {+ _0 [" i" b' v6 d. m1 j, D X7 u9 l# g plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) * Y- D+ {8 f) A# H3 g& R plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) & Y7 {& j' l" Q& C4 A0 ]2 X+ m plt.show() $ u, k D4 s3 V& x6 r
. i/ p G( ]$ i5 c$ C
; d; T' K; b* H! A

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

& s4 T9 u+ j, W8 u3 o
$ i% B' T' G: J; E6 W/ L `& Q

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

- T% i5 `7 o+ V3 n( u
import pandas as pd$ N( Z) e: f. D! L1 g: f3 j/ ` import matplotlib.pyplot as plt 5 ?& |8 T' v. _2 j0 L& V& H. @/ C* W4 L$ @9 k$ r7 j- }* Z2 q5 I& b #读取数据2 H+ {3 p" B+ c7 i data = pd.read_excel(matplotlib.xlsx) + i$ l( a) x+ C* }1 n 6 r* {5 }+ \8 i5 }3 ~ plt.figure(figsize=(10,5))#设置画布的尺寸 8 e' `; `4 Q, G4 J plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 " b7 @% }! @3 \2 p7 P! I plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小- q1 k& D- V3 E6 K+ ` plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小( {# k% r" _# Z2 E: E) v % J* t8 Y# f; A: a% A. V #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型; h: O" `; ]" b7 Y, x; a in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)" X/ G: I# H- h- ~ i0 i; _5 ` in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+) * N% P* \+ p! L2 p4 e) C in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*) 9 c; ~! o4 ^4 }, [+ ^ 8 _7 Y8 E4 g: ?) } plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限 4 G H/ I5 x9 N: p4 f plt.show()#显示图像 : s2 J) e: h' r& {4 \1 E- q; S
l+ k* D: E( Q: R9 z# h3 t
$ }3 \# k# m, {; k7 j3 H) @

4) 管理多个子图

& x4 `- S: J# ^
import matplotlib.pyplot as plt * v# d/ _; s( |+ I9 ^ import numpy as np : D5 |0 C B9 k) [ import matplotlib.gridspec as gridspec8 Q2 b6 v. u3 H import matplotlib.font_manager as fm #字体管理器+ n9 v; M5 Z9 q' _. E + | i8 ] h1 [/ e* L my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") * |% i3 v2 r$ F4 ?+ V. R& ^9 u2 E( ~* Q plt.figure(), M- R% d0 @! r0 R2 T8 _. e, D " M+ _) C! a+ o, p- L x_data = np.linspace(-np.pi,np.pi,64,endpoint=True) * o* _3 J/ }1 a gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列3 s0 e$ j4 ]1 N% R) z$ O ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 - e; O, _) m7 k" T8 X. c ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) ( H+ `" V4 U, z( D4 i; O0 S: a ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)/ a* h; D P2 _$ }$ `; U ) y' K6 z, o1 u! h& ~: l; T Z" I3 p #绘制正弦曲线' ] ?* G7 T2 G4 g ax1.plot(x_data,np.sin(x_data)) $ l7 v0 d9 Y3 j( U- P- d- W, t0 \, G ax1.spines[right].set_color(none)& u% c8 G; M* W0 p S! K ax1.spines[top].set_color(none) ; `) w! n2 P& f! e/ J ax1.spines[bottom].set_position((data,0)) " E' J3 P8 j6 z& s4 Q. S! y+ ~ ax1.spines[left].set_position((data,0)) : N. R# V" b1 @# A ax1.set_title(正弦曲线,fontproperties=my_font)! `6 \ V1 `) K$ q. a - K2 w0 m& g2 y' h) S. ? v9 j #绘制余弦曲线 9 k5 }1 a+ N9 L- |* Y ax2.plot(x_data,np.cos(x_data))+ V- L- u) p0 c: r0 [4 c ax2.spines[right].set_color(none) 5 E4 D2 [" E! L/ W ax2.spines[top].set_color(none)1 {+ O3 P, i1 ?$ S' D! s# P ax2.spines[bottom].set_position((data,0)) 8 h. \7 C( z0 ]5 ? ax2.spines[left].set_position((data,0)) 7 j& Z- ]/ \0 f9 l! r ax2.set_title(余弦曲线,fontproperties=my_font) 5 v# k* J) ?% w. g# z% k" E+ E4 M5 v3 l7 M, t2 t. ~ #绘制正切曲线 ( c* a$ t; w6 b7 p, k, j& f7 E ax3.plot(x_data,np.tan(x_data)) 8 n J, X& {) Z4 m/ f ax3.spines[right].set_color(none)7 ~/ M- t( S$ S6 ]: s* ^6 Z' r ax3.spines[top].set_color(none)# i: U0 p o! a4 d% X ax3.spines[bottom].set_position((data,0))7 D z! n3 n% G V ax3.spines[left].set_position((data,0))0 \6 |8 w: v: k U0 a' ] ax3.set_title(正切曲线,fontproperties=my_font)3 m+ Q* g7 ?$ }3 b' s plt.show() ( C u1 [# B& p
, R- D7 O$ q) B+ @, Q" P! z( p

结果:

+ d8 C0 R$ ^1 Z) S) A! n/ ~3 a
: q- B/ O2 @6 ?4 S$ x
) \% }5 |) d3 u3 z5 H E: H . T1 [3 g- w& R( a 0 F- K8 `5 J1 F/ _6 W ! K5 N3 _" B& N- u6 P7 X+ c' p% N& J* [* X$ T* O& ~
回复

举报 使用道具

相关帖子

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