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

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

[复制链接]
& ~- p# p+ Y5 f9 ?' Q8 Z* I

原创:宋宋 Python专栏

7 e# t: y& i' T' [! j9 ?. X1 P

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

' M8 t; ?- R$ D# k2 G

折线图

" U) n4 R. r1 x

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

. {3 s# p, X& I

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

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

1) 简单的折线图

* |4 |/ O( p i+ d# N7 g) o) g

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

- T2 @- y2 X' F: i3 W% |

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

* E+ n5 u* U8 H
import matplotlib.pyplot as plt+ C- w& O& _% T4 D C ( X$ i0 @' ^% s. j y x_data = [2011,2012,2013,2014,2015,2016,2017]1 C2 G$ _* t" K4 D0 } y_data = [58000,60200,63000,71000,84000,90500,107000] . Q m ^! x( r. X* W, f3 N ' O4 u4 h0 Q( q X8 J- F p( x1 m plt.plot(x_data,y_data) ! U! J7 u, O) L4 e5 p plt.show() # [" K1 q7 J2 g7 d; ^
+ r/ _ ?" M+ J( m! g2 j
( b3 L' G0 S) \- Z

2)复式折线图:

D* C( f) d+ B% c
import matplotlib.pyplot as plt& I+ d" d" r Z/ {. O7 g. t7 H/ E: U6 H x_data = [2011,2012,2013,2014,2015,2016,2017] % E( H2 ]1 I8 G y_data = [58000,60200,63000,71000,84000,90500,107000]: F1 v. r: w/ ?" p/ P' D, H y_data2 = [52000,54200,51500,58300,56800,59500,62700] * [9 q$ F ~$ y, o ) F8 z0 W! i& B) B6 { plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)6 Q9 X+ q1 ?$ U9 p) V plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) $ {7 ]! X3 k# @5 w% P8 [ plt.show() 2 T' S" H0 ~! |8 C8 Z `+ s8 s
; Y+ Y8 C: X) \' M% }
5 `: G9 D0 k l# G& `4 {" z

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

N* H' I2 s4 A* D( P
* R- B! ~/ D) t3 c) d

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

& A9 o1 `1 O2 K1 `5 g- j" |- @
import pandas as pd 5 O7 o6 u8 G2 f* l- U6 `# e import matplotlib.pyplot as plt . q" `' r+ Y" a - \6 D" d; a9 P0 P9 T W #读取数据 z1 q8 j* f) @* l8 R data = pd.read_excel(matplotlib.xlsx)! {" J& C# N/ I) Y( ] ( Q. P. a7 E: f/ ]$ _9 f plt.figure(figsize=(10,5))#设置画布的尺寸/ n' p0 ^/ l0 f" D" I0 l/ n plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 5 ] Z$ p9 f2 g5 u plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小 0 t" A& g6 T/ R2 ]" L- T plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 4 h, H8 N0 ]9 F. V% V7 o% |' x c" I+ ~$ a #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型6 F$ ^) F8 F* w! S# n9 s# V% r in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) {1 g2 @) E2 g. `8 A in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+) * o0 _8 }, y0 ~5 B+ W! I3 V in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)6 U. P* v: J4 Z; Q$ G& U9 [# v7 S: B l; x3 s9 {. V# Q6 }$ k plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限9 b& F9 d. Y* ~8 r plt.show()#显示图像, D9 S; d" ?0 Y @
' e! f* |4 a: e
4 v, K0 C A8 n: ?# h% I

4) 管理多个子图

N6 D1 t' s+ O$ P4 a6 j
import matplotlib.pyplot as plt 1 j% ^1 D$ _7 A+ p! z import numpy as np 2 k$ }0 k6 a# k/ I3 v import matplotlib.gridspec as gridspec 1 _1 K! x4 j* Y# T( M8 p import matplotlib.font_manager as fm #字体管理器. j! i0 Q% ?- q + z X, ~7 h; H# P( o4 b my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")9 B9 Y% K: r% `. I( x( z5 B ( p5 w, b: C& ]4 s0 `4 _ plt.figure()# Q' X& Y8 c2 M1 d% s3 L$ R% c4 t , }" H2 R7 t/ b x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)! ?: T- j+ L% I7 m0 u$ R+ _( V; W gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 2 I$ W0 O1 d& {1 ^! H3 N+ n- K# o ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 " z' o7 v N7 O" y" E) P- ~ ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) . ~7 L/ {0 E' l& { ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3) 5 j2 l8 u: H1 d4 ?4 F/ o4 ?: ~+ ^( y$ H+ i6 G) S #绘制正弦曲线 $ {6 w' }- S# a& _# ~7 O( Y9 q ax1.plot(x_data,np.sin(x_data)) & }# C% M$ U1 Y% ? o, | ax1.spines[right].set_color(none) ( b! [# q* w' j! z8 s: D# B; \/ F ax1.spines[top].set_color(none)9 w( t2 U, }; t9 h* m& x ax1.spines[bottom].set_position((data,0)) 6 L8 W9 s% |2 f1 j9 m ] ax1.spines[left].set_position((data,0)) ]8 H8 e2 ~9 u6 V) F& } ax1.set_title(正弦曲线,fontproperties=my_font)% w6 O8 a/ A" p, J& ^ . A# u, C$ e2 Y #绘制余弦曲线& H3 b4 d J3 Z1 e. Z: M7 a M; ? ax2.plot(x_data,np.cos(x_data)) 7 D* \( [: \1 z5 g9 Y6 y4 `. k) r ax2.spines[right].set_color(none) 0 U, R( g1 ^1 p2 a ax2.spines[top].set_color(none) % }4 R6 T' I; F8 l, `" q2 W- {) x ax2.spines[bottom].set_position((data,0)) : J1 Y7 d. H5 y2 t ax2.spines[left].set_position((data,0)) / g1 F( v# P0 b- M+ [- ^5 d ax2.set_title(余弦曲线,fontproperties=my_font)6 H: l* i4 |7 w1 `# m5 A) f " b% E; a3 B& N #绘制正切曲线; j& a5 A* J2 o+ z7 ^3 h) [1 J ax3.plot(x_data,np.tan(x_data)); M1 M# W% b0 V! c8 j% e( ?' X/ } ax3.spines[right].set_color(none) / x& u. ]6 D. h7 u# _ e0 g/ V ax3.spines[top].set_color(none)7 w1 b1 L( y$ v4 ~3 x* k ax3.spines[bottom].set_position((data,0))- X) F9 t7 U# m! `2 c) j ax3.spines[left].set_position((data,0))! B+ u# q4 @4 i. N4 U4 ^, @ ax3.set_title(正切曲线,fontproperties=my_font)8 \6 d0 C E' T+ I5 D; Z; M) K! T0 A8 W plt.show() ! @( a5 i. x9 Q7 M1 l
+ ^/ ^' P' w7 G6 n

结果:

4 A" {& h% F& ^7 F! P7 d$ q
% L* {# w6 e" K. N: Y e2 r
. q3 ~( k; L$ E2 C. t! S , e$ |5 o, ^2 S; z4 T ; U+ F9 B2 t+ p2 l5 T% J1 { % m# L2 j. S3 n! l' y, M) F+ d3 E 9 K2 z# L4 d# D0 } {( ]/ Q/ S
回复

举报 使用道具

相关帖子

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