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

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

[复制链接]
0 `5 q3 T! m! U r4 Y8 _7 y

原创:宋宋 Python专栏

5 `- g, O1 R8 [3 d$ A

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

m& ^( f b# B ` Q4 J& t }) r

折线图

1 k6 c" N% \. d3 G& L8 _

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

/ c0 p% o4 v: g% r3 v# @

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

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

1) 简单的折线图

% E `9 ?, W3 S7 A

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

6 r; A. s6 `% e1 |# S4 g6 D. H, @

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

2 V) _" o1 ~* a% i" j7 G2 Y& @- ~
import matplotlib.pyplot as plt + R6 b, t1 |; g4 L& k$ |( Y- ` ! b4 o N- a9 P% G$ ^ x_data = [2011,2012,2013,2014,2015,2016,2017] : ~% c( v* P& _* @1 G$ T; A y_data = [58000,60200,63000,71000,84000,90500,107000] 4 O4 w$ Q$ e& t- `' T . d }7 S# }) W$ A/ u3 X plt.plot(x_data,y_data)9 h# m1 ~5 _& E6 K, @0 Z plt.show() # I+ D. r# O; Z: R' v& n; l8 ~
8 y9 }" ?/ V+ C/ g- Y* z I0 s( t
4 E! `9 y; o% C) m. V$ {1 _

2)复式折线图:

! D" a1 z' s0 C, |( M1 q
import matplotlib.pyplot as plt 2 _1 K) L& M2 h; o- S x_data = [2011,2012,2013,2014,2015,2016,2017] - q& S# m, E+ E. Y3 u5 z y_data = [58000,60200,63000,71000,84000,90500,107000]' Q; N# O' U8 i( ^0 y y_data2 = [52000,54200,51500,58300,56800,59500,62700] ' G9 l- j5 o: S # E* M2 x5 r; E" k0 b plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) ! _% J8 l% B% E4 f# `& b' h0 p6 z plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) D3 E1 V6 w* }- w plt.show()) h y' F0 G6 o
1 ^' l; u7 ~, r4 P
4 ?7 ^9 k) o3 ?' w* M* |$ E

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

, f) W7 T4 K8 c" u
# l8 R# e9 a y/ Y

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

' L5 Q6 w+ S u# B
import pandas as pd$ A9 X% ~: t: e$ |# d import matplotlib.pyplot as plt+ y% n2 ~7 I. `/ l ( P4 n T0 j2 X1 e #读取数据 1 X5 ~% I5 H) G, p: V! F1 p, v( e data = pd.read_excel(matplotlib.xlsx) 7 Z' p3 {- l) b6 z, b * z) J. v3 G& A% ]) P' q3 D9 o plt.figure(figsize=(10,5))#设置画布的尺寸% [, ~0 T& V* U3 S- z plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小; L1 O2 T. w* {% O \: Z' T; R plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小1 ]9 t: ?/ s* r# @ plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 ! j5 _: D4 p/ ]; u7 g ) h& Q9 L1 F" p #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型8 X: q1 b+ W8 {/ H- q+ s. ] in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)3 c- U5 }; i* i8 A9 ]& C in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+) * i% O b/ e+ a) A7 l" J. U' N% Z in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)3 L# P' u0 O. o; ` 6 p0 e+ f' [- ^" ?/ \* W plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限 0 Q( N8 {. V* F/ @6 t plt.show()#显示图像 + N( W+ g2 P3 a! Q# X% u+ {
: D, X4 e1 s Q( q! U; Y/ f0 c
9 e) N$ ^' i. e: K( b3 F& i7 ^

4) 管理多个子图

! d( v+ b3 {) A) F5 K
import matplotlib.pyplot as plt" |$ l" `& I; R m# B& p import numpy as np2 T5 x5 @; M1 Z# u1 l import matplotlib.gridspec as gridspec , h. B4 ^: t4 m3 b2 u# a import matplotlib.font_manager as fm #字体管理器: ~& G0 a% }5 J o1 P6 |! I8 ~ " \! |) ~) l3 v# C my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") 9 P1 O) n0 A5 v5 R0 _ 6 `1 W9 ]; N' { plt.figure(). {, Y" V5 x7 S0 ]! W 6 `2 h3 M# I3 Y x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)# N. t$ V0 f6 |- { gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列( D( f7 i! [" m) {8 i8 w" E ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 1 g0 k* n' z+ O4 S( p ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)/ n- o1 ^" B8 [$ |1 T ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)/ t. F" o' Z- q! a, p8 u9 `* x 6 c7 b& L7 b" y. O/ [6 e8 \& x) \+ b #绘制正弦曲线* l1 s+ @1 v! `2 R; F% y ax1.plot(x_data,np.sin(x_data)) ) M) L! S# H2 z' _ ax1.spines[right].set_color(none) 8 K# i b9 ]- }2 t- h: v ax1.spines[top].set_color(none)( I0 W) t/ ]$ p( P2 s ax1.spines[bottom].set_position((data,0)) ! K! c- ?9 {3 N5 H) @: v) M& F ax1.spines[left].set_position((data,0)) ) L9 r: x0 V7 y8 H1 l7 G ax1.set_title(正弦曲线,fontproperties=my_font) . {3 {# d0 M# [8 I: N) ^! E - S/ y0 q: {/ Q! `/ F# t #绘制余弦曲线 ' X. T! o& _; F5 ]( y. s& `3 M ax2.plot(x_data,np.cos(x_data)): U% n( I0 ?% h7 a! p ax2.spines[right].set_color(none) ) {2 a9 \- w- M' h+ e4 o3 g% S ax2.spines[top].set_color(none)) R) X$ o$ Q* g# R( Z ax2.spines[bottom].set_position((data,0)) * n' j% j) E Q- G. v ax2.spines[left].set_position((data,0))' u [" g, |& `6 |' J4 Y ax2.set_title(余弦曲线,fontproperties=my_font)* K) j& L6 B8 d5 V e; I4 a# S% t5 j* D #绘制正切曲线5 H8 m( N4 O d+ }7 R% G) J" Z ax3.plot(x_data,np.tan(x_data)) ! b5 q# R$ [5 L' b ax3.spines[right].set_color(none) ; V$ E- t" J/ r+ L! F ax3.spines[top].set_color(none) # k* x# v% m! u ax3.spines[bottom].set_position((data,0)) / l- M" d( @# E( Y ax3.spines[left].set_position((data,0))7 S% Z: _ T$ _8 {& g& ?! u2 x ax3.set_title(正切曲线,fontproperties=my_font)& ?$ {; M' z/ O$ a plt.show() ; ~- ^, E# d# v
3 P5 \. ^ h+ z+ r0 `$ K

结果:

5 O- c, B! E A* J9 t4 N
# l7 a# ]; c R( I+ Q- \; `# q
n2 J2 j' V3 } a" q0 _& ]- }; `+ ^5 ]) L$ N5 }+ b2 T7 `4 p 0 b6 W! q0 H7 U# s Y& W, ^. P; { 9 \0 p" R+ J# e4 R9 `0 X
回复

举报 使用道具

相关帖子

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