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

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

[复制链接]
' n& M) m7 v; {6 s9 ` d6 f3 B/ i

原创:宋宋 Python专栏

9 u8 R1 w' T0 t% K# e

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

2 ~6 D1 m# L, L& ]& V7 K

折线图

; c; J# I8 I7 |: c5 U. F/ [3 w

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

0 O: o* B9 W) p% M0 y

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

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

1) 简单的折线图

- N6 e$ Q. W* P2 R" t8 x; K

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

+ | V S5 ^* I4 B7 G O4 |

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

+ X, K& b) k% H/ R$ @) Z$ R
import matplotlib.pyplot as plt 7 s! C. |* y6 S' j $ {" ^* n; `$ [+ j# w x_data = [2011,2012,2013,2014,2015,2016,2017] ' q9 A# ~0 w: A! y) y" d( ~ y_data = [58000,60200,63000,71000,84000,90500,107000]8 r, t9 t' ?1 ]: ~" Y4 G 8 q# F$ ^. I; X1 H& \* \! K plt.plot(x_data,y_data)6 a: M+ M" \9 P plt.show() ( n# u/ D4 L6 r+ g4 K+ k* `
% Z+ d4 B _8 l/ Y
# u3 r0 M/ Z+ |5 `

2)复式折线图:

+ x6 `# V8 Q6 L* U' r
import matplotlib.pyplot as plt8 p# c2 [, n, E) S7 [+ D! [: r x_data = [2011,2012,2013,2014,2015,2016,2017] 7 J4 h9 _, F4 o1 R# y' K9 m y_data = [58000,60200,63000,71000,84000,90500,107000] 0 e6 l' o1 u6 d" @; N y_data2 = [52000,54200,51500,58300,56800,59500,62700]) W6 H; w* p" `! j8 ~, w + V, ~+ ]" `* o$ b3 q plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) 4 h7 g8 r6 o9 c1 m+ J! ~/ m4 A, T plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) & A7 D: M4 \$ n plt.show() 5 y* D. v" n& A' J8 N( s" |5 v% m
& |5 B! D: h9 o# f. M V
) `- m1 s( Z0 G: X! T

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

' M p! C d6 I, B
2 S9 f4 E: {4 [) C# V: Z6 W; ?

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

W: b3 L8 {- b; `
import pandas as pd3 B, T7 M- K) ~/ |9 V3 e import matplotlib.pyplot as plt 3 h5 a! s) t: t& R4 K8 J1 B c& z) V8 r" A$ G0 g) w #读取数据: @) Y1 C% q; X data = pd.read_excel(matplotlib.xlsx); v+ y# g7 v) ~5 U * z/ @2 ~* I. P$ d' ]' U plt.figure(figsize=(10,5))#设置画布的尺寸 : }, [& J4 U! K: e( Z1 X0 b plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 7 d5 c9 q# g/ U& I7 z6 {0 \ plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小 9 X( v9 b* A1 U0 D+ b plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 / ?) O- K+ B, l7 @0 W2 t$ L7 |( x #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型 9 M4 y x) ~& E- f" \6 g8 u in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) 4 A0 S+ P2 y4 ^/ m in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+), g' P4 t& G8 s+ ? in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*) 8 r, M! ]& |3 D3 j" M1 L W+ N0 }* O: _- S+ P- w: J6 D g plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限, |* E3 O, j+ V# x plt.show()#显示图像 Z3 R, | W6 ~: ?$ D
( f6 @* F$ j1 a0 Y/ h6 J
! I4 E* \, s6 a `

4) 管理多个子图

7 v6 L3 R9 x' b& ~# G
import matplotlib.pyplot as plt- Q9 I! ] A/ W import numpy as np + v7 Z& d! t; q! t/ s8 D3 O* i import matplotlib.gridspec as gridspec' Z( G4 N3 U* c9 I) O0 J import matplotlib.font_manager as fm #字体管理器 - w( C' J3 m6 L+ E# q3 Y / ]0 H2 r" O7 {4 h0 a my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") ( c- _2 t7 Y( E3 ]. }# H( g & A& h$ d' h( R6 T% b plt.figure() 0 O; V$ m( u5 A) N! U) Q& j/ s! Q " M8 I- d! o3 E. g x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)3 W C$ e- X$ @) T& `; }" ] gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 * y- Y2 o% u7 @) [% d7 c7 I ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 " i. K' m+ L4 E2 T* \2 i4 e. { ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) " x" z! p3 X7 i3 {' G# V% L ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)* }! d% a' c" R; v' ^" I, w ( Z( Q. i( L5 v7 `9 R8 B- j #绘制正弦曲线6 j7 s( V r/ g' i# r# P ax1.plot(x_data,np.sin(x_data)) - h; M& Q8 \4 o S ax1.spines[right].set_color(none)$ @7 z0 H' {, N$ T( `. u ax1.spines[top].set_color(none) . E; }$ ~2 h1 p3 m% { ax1.spines[bottom].set_position((data,0)) + O4 m8 d! X- ]* O ax1.spines[left].set_position((data,0)) ! d1 J& B- P& `: Y1 W1 v9 f ax1.set_title(正弦曲线,fontproperties=my_font) & h0 _% a+ b0 |$ R& @( t! w 2 E6 c! L! N% |6 M/ U: y #绘制余弦曲线 / D6 p7 Y. g3 [$ X) Q, i ax2.plot(x_data,np.cos(x_data))) Y. y, x; M$ [ |: u3 I. ` ax2.spines[right].set_color(none) 4 r" y- H a- _6 }7 x2 F1 { ax2.spines[top].set_color(none)! d3 v% |* j8 x. R: ~$ ` ax2.spines[bottom].set_position((data,0))3 P l2 ?; L$ }! H ax2.spines[left].set_position((data,0)) + C' ?: b" J! P3 n ax2.set_title(余弦曲线,fontproperties=my_font), v# n9 ^$ o$ P: ^/ U [# ? O7 V5 } #绘制正切曲线 0 k9 e' H/ N4 G. z ax3.plot(x_data,np.tan(x_data)) ( \' v- q! a8 k- Q ax3.spines[right].set_color(none) / G; o. H+ g* E: ~; i. F/ K ax3.spines[top].set_color(none)7 K; j2 y# A* V7 A" E) V9 _' @6 ~ ax3.spines[bottom].set_position((data,0)); C9 L1 G9 p# [ ]* g1 P7 A ax3.spines[left].set_position((data,0)) " `- G% ]8 @! g) ]% Z3 } ax3.set_title(正切曲线,fontproperties=my_font)2 {+ m- e: H- V& `( ?1 U. q2 \+ G plt.show()) T1 h/ O5 P4 O# F \" J( [& }
) ]( U5 N2 H5 F! J! k7 v

结果:

, s7 j, f5 G9 j
' _! i% ]6 _* b
+ \: N. {2 B- ? g- W I" y- |* w $ S8 L! N% H# a! w6 p5 ~) _( a i) w ! ~2 { T8 _- P2 y' r$ F 2 g- a' y& I y5 \& m2 a8 h6 V
回复

举报 使用道具

相关帖子

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