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

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

[复制链接]
/ R$ s0 T" K7 \# w+ V: l

原创:宋宋 Python专栏

/ `, E7 K3 l. V( p3 {, A1 G

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

1 w% P# L9 Q1 o# s

折线图

3 B, y x' X" g0 X

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

6 R8 }8 P1 O: B% T0 `( W" a

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

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

1) 简单的折线图

v& I* k: ]4 e7 i) J+ x

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

& N# |: o5 W+ I4 c

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

# }/ a" \. s# V! @4 m8 F+ ?
import matplotlib.pyplot as plt: W' x9 q9 r" |, h8 D/ t" O! z 6 Y( q) x2 m- k% X6 ]+ E# y: e& [3 { x_data = [2011,2012,2013,2014,2015,2016,2017] 2 q4 H* }8 D! d" B: Q i, s* D1 E y_data = [58000,60200,63000,71000,84000,90500,107000]& [; a! d# y4 S$ [, W7 U / a4 X3 \' A0 N# `0 F+ [ plt.plot(x_data,y_data)4 M1 v Q5 l. i plt.show() 2 f2 J8 y. q% S0 _
) d4 ^( n% e& A4 X5 Z @9 E0 E
& W/ s+ V t! l' T: v

2)复式折线图:

" S: f" ^4 Z6 C5 e
import matplotlib.pyplot as plt 1 U3 x( c4 P, W x_data = [2011,2012,2013,2014,2015,2016,2017] 9 M, h' Z3 d& Y6 ]# n y_data = [58000,60200,63000,71000,84000,90500,107000] * l# P2 L2 U8 S0 e7 a) M s7 V y_data2 = [52000,54200,51500,58300,56800,59500,62700]% k; k; }0 y" ]7 D W' ]; O- v2 W7 k } plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) " T" A2 ]- l8 {3 L/ U1 x plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)3 F/ L0 {7 z) ~4 K* d( z plt.show(): X0 X/ ], A- j
. g* ^6 |# ?* u! N
1 j! z0 r3 r: J) ` c

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

8 H1 Z* A+ o& p* J' t h2 h
$ ^6 f) X. P" K3 L, ]5 w# `

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

" x( `' A% J, l9 K. m6 `* }! ]
import pandas as pd / V. l$ L2 s' T/ A' @1 w D3 x o import matplotlib.pyplot as plt 5 f% ?% S! p7 p9 Y1 X$ F; W+ h& }/ I( W- Y# U5 }' V #读取数据 ! t. x; ], X* |; [ data = pd.read_excel(matplotlib.xlsx)* q3 G9 ^; c" r* z G0 f) S. Z 0 h7 y6 @) T* n- R; j# U! M, s plt.figure(figsize=(10,5))#设置画布的尺寸6 @* m4 {3 ~! [# T6 ~& O plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小3 o% S$ ]# I- h9 f- F) W plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小 c) P0 P! r* q4 V% b- N; R; r' X plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 ) J/ b# E! D, w % H8 a& H: @# b$ @5 a #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型$ {0 A$ } ]; |+ N1 W- j in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) " I7 t2 T- g1 n9 v in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)1 o3 Y( U% l: Z1 F. b5 y in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)4 h4 n0 ^3 t9 g+ | # c9 P. `- R- L/ F/ C2 f$ @ plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限 7 [6 i; F+ J! C- c4 {" B9 H: } plt.show()#显示图像: r/ G8 [0 f0 A w1 ?
4 ~& J! D% S9 D% ~3 ]% A% R
( ]1 `$ L% r8 l+ [) R# _3 U3 d

4) 管理多个子图

3 y9 ~" X) r3 P1 P5 b, |. b# i
import matplotlib.pyplot as plt % b! y$ V0 r% W' d import numpy as np! J ~4 ^; B+ \# o! ]8 X: ]. @ import matplotlib.gridspec as gridspec ) G" o+ o$ W3 g5 | import matplotlib.font_manager as fm #字体管理器& O+ x( k3 t0 }) |( i1 `6 v 5 P( |, v( [% K4 j! s+ ^5 H my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")0 p, e- y y) z q2 \, a' W9 o6 z+ b$ X plt.figure() ; v& ^- \, H; U* R- m. x' \$ T / I }' D) L0 S x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)- x* U9 i3 x/ N O" e. C gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 . ~/ _4 i- ~( u/ g, C ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行$ B! l' Q+ O2 K7 ^ ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) f' R. `5 H5 z" f3 E ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3) 3 J L+ [1 L. J3 a " ?" B7 b( C& Q6 r7 C #绘制正弦曲线 & x4 o2 O/ L1 i% o' ]! m% \3 G4 ` ax1.plot(x_data,np.sin(x_data))* a6 l) c1 k# H ax1.spines[right].set_color(none) + A; o4 V3 }7 b) \ l5 D ax1.spines[top].set_color(none) 6 d1 ]" C$ }1 P8 q O, E8 O ax1.spines[bottom].set_position((data,0)) 7 u) B0 F, P: n6 I6 f' b! \) ` ax1.spines[left].set_position((data,0))5 j8 |7 e. ?8 W$ y* p2 Q8 v5 [ ax1.set_title(正弦曲线,fontproperties=my_font) ' G6 v$ ~- @/ ]* j5 J O 0 W! G8 ^: R1 x. H/ ^& |$ a2 K$ p #绘制余弦曲线. M$ J& d D6 A6 j: M3 j0 U ax2.plot(x_data,np.cos(x_data)) ) x) F5 m+ m+ {& F ax2.spines[right].set_color(none) ; @3 W8 E7 w6 M' D3 g3 T/ O( H ax2.spines[top].set_color(none) 3 z% {; o$ f f- S3 s0 E) U4 U ax2.spines[bottom].set_position((data,0))( Z+ i1 J$ b( _( F# e ax2.spines[left].set_position((data,0)) 1 ~5 H4 M# ]% u9 d; i ax2.set_title(余弦曲线,fontproperties=my_font)" x5 z. w+ b/ Z6 p% q 0 [ G i0 k, Y9 [6 {, ^ #绘制正切曲线. g, w$ {& V% U* x/ d5 I ax3.plot(x_data,np.tan(x_data)) L# E$ N+ c* Q" z( _- g ax3.spines[right].set_color(none)7 r- i8 a- r6 t ax3.spines[top].set_color(none)1 u( ~2 M) ~& v6 c0 z ax3.spines[bottom].set_position((data,0)) ; U0 m/ Z4 U9 @& _! L( C ax3.spines[left].set_position((data,0))4 `2 q& y% s9 y$ `' S8 k/ @$ V ax3.set_title(正切曲线,fontproperties=my_font)- h# ?* @2 S( T8 C plt.show() & H5 ?8 D! {# l* g# Q
6 O$ k9 Q6 O! i& L5 i# |& [

结果:

3 C$ P/ z# ^) `
; ^; K( r* h4 B' I
7 T7 ]4 }# \- B" ?1 A' `; t " a# H* m9 R( g! J / e# R! }% K8 Y3 y. k+ Y. R/ A+ ^/ o0 b. J- x$ j. [ + _& ?& j5 z! G& I. I8 y* w
回复

举报 使用道具

相关帖子

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