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

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

[复制链接]
0 j( ~4 g! A" w4 Z8 W1 i

原创:宋宋 Python专栏

8 D4 G; `: z; @0 x9 F

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

! }; ^: e! F ~5 a% q$ c: }

折线图

% w7 U! H4 H- _

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

# ^- L7 b: Z7 u2 \0 l# _6 o4 c) D

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

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

1) 简单的折线图

' T) t, s4 M9 N8 w; p- z

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

4 v. h8 F8 M+ Y9 G0 K' G# h4 Y- @

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

' K: Q* j# k' r% N- v4 R$ i, L; z
import matplotlib.pyplot as plt 4 R& w5 H- f+ z l4 Z: Z z / D2 P( H; k( L3 }4 p8 N x_data = [2011,2012,2013,2014,2015,2016,2017] & {9 C# R6 W9 Q, M1 f8 R" \3 P1 N y_data = [58000,60200,63000,71000,84000,90500,107000] ' f1 }2 B3 ^, K% a p: U5 p % T) e. B7 g2 ~9 V' @ plt.plot(x_data,y_data)( } d% j6 ?6 j }6 o% b plt.show()# L; y- t) {5 F: a' _0 C1 X. \
: a! ~( V* ]6 {4 e+ X
0 |! j; W+ N* o0 X7 z: U- ?2 ^$ \

2)复式折线图:

$ X/ c' W! ] y2 s, q1 X
import matplotlib.pyplot as plt7 m( o+ J& W* O: Z O* _ x_data = [2011,2012,2013,2014,2015,2016,2017] + e6 j. W5 S( ?' c$ x* R y_data = [58000,60200,63000,71000,84000,90500,107000] , }1 E1 A5 r. R+ N y_data2 = [52000,54200,51500,58300,56800,59500,62700]5 j, B8 o0 M. H. G+ i0 T } 4 Q$ X( m! N- c: z( z6 T plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) 8 g* I0 D- L3 U; n y; q, R+ L' J plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) 9 p9 N' r/ t. L6 v plt.show()* j" V. {9 G7 B+ z' d, I; Y
5 L W( f8 \3 `9 { D( U
; z/ @. b% k+ ^% |. n

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

; J9 J4 {% X' Q3 k6 O
' p: k5 l6 x8 g. \# ]$ f! X

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

: p1 ?+ \% @' Q! e& v
import pandas as pd 5 L4 h2 D/ ^# b. R6 E import matplotlib.pyplot as plt & N! r3 c$ G1 ~4 v" E( G+ C% U/ O $ Y: H) b" @* ?0 R3 h, I5 ~ #读取数据 ]# ]/ e2 q( q9 K( k data = pd.read_excel(matplotlib.xlsx) & T" H! m/ L4 N+ x 3 A2 m9 R+ }6 ]; z7 D plt.figure(figsize=(10,5))#设置画布的尺寸 4 S h7 b2 h% x. E7 k ?% c plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小% V& K% l$ `, z" | plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小; a1 j: A6 h! v3 M% S9 e* x/ J4 Q plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 : F! a4 L8 ~! F3 E$ t 8 I/ u7 H& j' y W #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型# `0 Q5 g3 V8 ?" m, {. V( x in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) $ O8 t9 j; } p9 \! e8 p in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)- B3 S9 |) x! \2 m in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*) 0 v S9 r. ]; K2 a8 Z/ j/ O+ z& W# c6 N/ R) Q6 [4 ` plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限; C2 O# }( z3 ]( Q4 X plt.show()#显示图像 " i, d0 i6 J; S& ~3 O% H
! v. \ r% V- t+ V
( W/ ^' w& p7 d) e* w

4) 管理多个子图

6 W$ C2 f/ V0 I
import matplotlib.pyplot as plt, \* P; @4 G$ u0 d! b7 \( y6 a import numpy as np: f _' U: c. W import matplotlib.gridspec as gridspec r' {" g* O" g. v import matplotlib.font_manager as fm #字体管理器9 {* ]* ^/ a( s; ]4 E " C3 D$ d" s2 i- k' v my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") ; S2 p* i$ [7 G7 b0 E3 J" ^+ d- U' N8 m8 X9 H3 D( W* q+ Z; f7 _: V! z plt.figure()9 v8 C6 `0 g" J2 t0 f1 V 1 Q$ ^! Z" C# F$ p- o1 s$ A x_data = np.linspace(-np.pi,np.pi,64,endpoint=True) / `1 a; p& Y/ X) `1 o! ^ n gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 f5 @) F+ V4 u1 i$ r; J ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行) P3 Y% g& h$ T; ~1 G4 T ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) $ x3 m$ Q7 S! u; Z' u0 g ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)! d9 s% L& I; } 1 {* f. _# k! z" J+ t0 i #绘制正弦曲线0 f8 t) u$ j9 s2 ~" {2 L ax1.plot(x_data,np.sin(x_data))& y/ [2 R# x, S. O ax1.spines[right].set_color(none) ' D q2 I ]0 E. d ax1.spines[top].set_color(none) - ]7 j7 Y' ^0 y ax1.spines[bottom].set_position((data,0))7 b% c2 w2 {$ \# v4 m# ^ ax1.spines[left].set_position((data,0))5 }& x0 f X; A ax1.set_title(正弦曲线,fontproperties=my_font)0 }) U7 q# Z6 s9 |9 Z 8 D4 a# C9 L+ z# A5 W, m+ W- }( ^ #绘制余弦曲线' g- N) e% I3 H ax2.plot(x_data,np.cos(x_data)) 0 R. e n/ V# x3 E( |- J4 s/ s# C! p ax2.spines[right].set_color(none)- v3 P5 V3 n" \ ax2.spines[top].set_color(none) 8 v& b0 B0 G% _0 A- k( \$ N- N ax2.spines[bottom].set_position((data,0))' t6 R. G6 y% {' m h ax2.spines[left].set_position((data,0)) ( j1 [2 o+ ^& t$ M ax2.set_title(余弦曲线,fontproperties=my_font)$ B) w! ?( n8 ^; V1 k7 R " R7 f9 [- x1 i; p: A& D& N #绘制正切曲线 , j1 _+ e7 Q6 A& b8 V ax3.plot(x_data,np.tan(x_data))4 ?& Q! Y& X3 E7 l) W3 R6 Y ax3.spines[right].set_color(none)& j2 W) B; ]# ~5 E9 j ax3.spines[top].set_color(none)" [/ ^: Y" m M5 O0 U; w ax3.spines[bottom].set_position((data,0)) 9 w; }( _2 u( ^. m7 I- {+ h ax3.spines[left].set_position((data,0)) / A1 L v0 o8 P& ]+ G7 e; L ax3.set_title(正切曲线,fontproperties=my_font) _" C# o1 i/ h8 j# i6 J1 [ plt.show() 3 n2 C9 R9 A' l! r' U
) m0 V. q! l; d6 x0 j: G

结果:

% c* K' T2 G1 Z. M- |& L S
- ]3 R) Z3 c' j4 C
7 L* A! n8 d) | ' D+ L! A2 g3 \1 j! e/ D/ t/ S % g! G- b" j- {( `2 q. j" o' ]$ L2 [. x% O* S! X- V1 r) o J1 p, s9 E6 s/ M0 Q9 I
回复

举报 使用道具

相关帖子

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