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

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

[复制链接]
; [( }# \: d* _+ Z

原创:宋宋 Python专栏

1 u+ w. ^' i- J

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

4 @6 l6 o( N- v- T

折线图

% q9 y3 G5 N. o$ @9 h

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

9 o, |/ @- B" {. e* N6 s0 e

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

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

1) 简单的折线图

; v% V5 M% }& s

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

+ ?# `+ o% n/ L9 j: J( q* r

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

" D; s1 N1 O+ F' \
import matplotlib.pyplot as plt ) Y2 d0 X. \5 |3 u$ |4 Z: i/ ?. x! U) h x_data = [2011,2012,2013,2014,2015,2016,2017], K4 L$ r6 c+ @2 B; O% s y_data = [58000,60200,63000,71000,84000,90500,107000]/ g- T/ I' b, a/ Y2 s 8 L0 B; X- m' i/ _ plt.plot(x_data,y_data)% u/ b0 V1 l0 b* O/ }, J. P plt.show()6 _, z' d4 P6 q8 H- f; u3 L7 d* E
& u" v) D0 E2 ~; E5 w& j
+ q, ~4 J& i6 Q0 Q0 u' E

2)复式折线图:

6 D$ E0 t% X% g+ B/ ] |% P
import matplotlib.pyplot as plt/ e' P4 N5 A0 d3 \; D4 U8 t x_data = [2011,2012,2013,2014,2015,2016,2017] 7 Q' G! t8 F1 x/ @1 Q y_data = [58000,60200,63000,71000,84000,90500,107000]! q; ?$ c- Y4 s" r' R6 m y_data2 = [52000,54200,51500,58300,56800,59500,62700] a* I1 X4 I9 s) u' C' \2 ?; G3 K + {, R& [4 X& {# V1 j; v' V plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)% Y. ^& |# B* a plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.), }- e+ a( G; f( `. K) I plt.show()9 y+ Y1 L* h8 e) r9 @
9 \ q* I, L8 Y: a6 A9 m0 g
- z6 o# z$ C3 X/ Y6 B7 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 是指标记点,有如下的:

; l9 K- f- b1 a3 N2 D3 ^" v- k
, }# U* h! \: v, M* q

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

, |9 l9 e( i# Z$ Q% {
import pandas as pd ) e( e! L$ m) v5 X import matplotlib.pyplot as plt7 Q) n; A# m( D- l) b# u / v$ Q3 B! L" d* H5 C( l #读取数据 ' N$ f5 W" C5 ~3 T5 w9 Z data = pd.read_excel(matplotlib.xlsx) % _8 i/ v5 Y/ W( s) d( Z ( y4 m7 R4 J9 D+ w" @ plt.figure(figsize=(10,5))#设置画布的尺寸- y8 j0 P2 `: T$ k) f. u plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 8 C3 B4 ]/ P% {3 s4 P6 ` plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小 " H; t1 N5 y/ S3 W2 R8 x plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小6 Q& k& V @/ Q& \5 M # L* n3 Q9 W; l, b+ d( } #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型 ( h/ d9 q( V- N' m! I+ k in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)$ I+ u8 F8 O7 J3 L& k2 R+ O4 |1 m in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+) ( p+ y c1 W6 M9 }( z& T) W in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)8 m1 V0 x) C# h O - u2 i |- K+ x( A9 d plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限2 F- _4 i1 a% ], I plt.show()#显示图像 + H0 J. g: R/ `- W
; f9 O9 @* P7 K
7 t4 h4 h Z0 e1 l

4) 管理多个子图

) [1 \- Z! w; @( I4 ^
import matplotlib.pyplot as plt 5 F' `$ ^% w% `: U1 ] ]8 U import numpy as np ) H( i1 z- }: j! D/ C' t. j# P import matplotlib.gridspec as gridspec/ N' B+ _; z6 d; g. J( r) u import matplotlib.font_manager as fm #字体管理器' M5 ~; x) e& [0 t0 J # k8 k$ U% B! } my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")& A$ E* o+ x3 J, P1 K+ i - H. O0 w# C6 X5 @& C8 c* u( w plt.figure(), M9 @& h; \1 S9 f: [) i2 `2 L* ` % M- F& @5 t$ E' Z x_data = np.linspace(-np.pi,np.pi,64,endpoint=True). I: l! p0 i* z" S( \' s gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 9 u' C a9 {) e5 L: G ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行) `7 P7 K# c2 P5 ^5 W, a ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0). X8 e$ w* v1 [+ C4 x: b ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3) & v3 l0 @: A [4 g5 H% A2 @% p# D5 L0 R5 m2 D, W( l #绘制正弦曲线/ Z1 O8 s& U5 H) \: z4 m ax1.plot(x_data,np.sin(x_data))2 Z) y1 d W9 ~: ^0 A ax1.spines[right].set_color(none) ' X p3 d) j/ b2 ?9 v3 }( @) o ax1.spines[top].set_color(none) \; V1 H) F! H* S, v$ p ax1.spines[bottom].set_position((data,0)) ; r9 @; }6 e* Z+ ^7 Q% q6 G: { ax1.spines[left].set_position((data,0))% h$ ?, l3 B# D ax1.set_title(正弦曲线,fontproperties=my_font)" X% S$ g L& b* ` . `0 T E( `5 S$ M3 E1 Q$ o #绘制余弦曲线2 N9 Y {" N# d7 S' b% q ax2.plot(x_data,np.cos(x_data))6 C$ K! V& P. @8 F0 ~4 M ax2.spines[right].set_color(none)2 L) v+ a/ I$ z, i( U ax2.spines[top].set_color(none) ! ]7 A% i. D% A b. d6 y# { ax2.spines[bottom].set_position((data,0))# |' n6 N& y' ~' ^# }) u5 c ax2.spines[left].set_position((data,0)) ( U, a5 e+ T8 J8 x- P ax2.set_title(余弦曲线,fontproperties=my_font) 1 H1 V. D9 F, ~9 \ [" d 3 @8 s* z6 Y0 t6 d0 y: o #绘制正切曲线 2 |2 C$ ^" M6 A4 U$ h ax3.plot(x_data,np.tan(x_data))3 V1 S P, P. o! n* w l% u ax3.spines[right].set_color(none)$ a1 F$ Y7 f0 Z* Y% h; r7 c, a ax3.spines[top].set_color(none) 7 Z/ n* d0 }* |- M ax3.spines[bottom].set_position((data,0))( q$ b# c* Q6 E, O2 T" R ax3.spines[left].set_position((data,0)) @& w! J/ U: I" z ax3.set_title(正切曲线,fontproperties=my_font) ; f7 |3 B: G1 Q! [ plt.show()! X, j" ]+ Q/ Z4 F0 H
$ S7 ?5 W: R/ r' \8 I" J

结果:

4 Y9 Q# ?, M+ ]" ?2 c
0 X F# U% F/ Q6 n! O& M6 n7 M0 R
) E8 r7 f0 |* b) \' k; E0 c9 j" c) a0 G0 P # X5 e5 w7 b3 ]) ?$ j) r1 r! Q; j : M5 d: R+ ^. w, r. m7 o
回复

举报 使用道具

相关帖子

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