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

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

[复制链接]
! r1 B2 e9 }4 K5 G; _# [* Q

原创:宋宋 Python专栏

7 Q6 o( M7 {4 p; ]1 {$ a4 M

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

5 A' ]/ [1 `" Q0 h- q

折线图

$ o/ S6 ~2 J ~3 A, U* @9 @0 w2 u

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

3 O% p+ H8 d5 X5 m; D& V

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

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

1) 简单的折线图

1 x5 ~ m# [" I) Z& U

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

- H2 L6 z: w% y; p

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

* k8 N" N; \5 p0 B) S: U
import matplotlib.pyplot as plt/ u3 N5 G1 v* m + V1 {9 o. \4 S% L$ g, i* Q x_data = [2011,2012,2013,2014,2015,2016,2017]% }# [# E- h) o5 L# e y_data = [58000,60200,63000,71000,84000,90500,107000]% [ P5 y5 r* r 9 I8 q6 E0 R5 N$ Q8 m/ P6 D! a plt.plot(x_data,y_data) 8 H! c% A _6 h \+ Z0 Q plt.show()$ o4 M% n/ M) Y, g
, Y0 }/ D. w) w9 `4 Y& h5 F) P
; Q( E3 j6 p Y& I& z/ H n

2)复式折线图:

, x* a3 M, Z7 E, d6 Q$ Z9 D4 z
import matplotlib.pyplot as plt# N1 H& r# ^7 t3 Q x_data = [2011,2012,2013,2014,2015,2016,2017] 8 `% T; y2 X: }& g) ] y_data = [58000,60200,63000,71000,84000,90500,107000] & ?7 G# \" q* \- d; ^8 C y_data2 = [52000,54200,51500,58300,56800,59500,62700] * o3 [, u' c1 g: f5 s , C' \+ g# C' i- N3 E0 y plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) 2 Q5 r. r* z% d8 [7 l plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) $ F6 N3 J% {2 S$ A3 r. M4 I7 J" R plt.show() + v4 A2 ]3 e2 |* I
1 k; n' a f6 d5 a8 f
# y Y k6 ]$ _) ^: `

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

' i9 L. v& z ?; l2 F4 P
! |, O5 ] u$ d- E

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

0 x7 ~& r, S8 F( F" e& c
import pandas as pd 9 j$ X+ s( z4 }* r import matplotlib.pyplot as plt, S7 i, y- w0 n' d2 X$ H& Y 4 Z! i/ m) g G! L5 v/ p #读取数据) V0 w/ I1 j# D- N data = pd.read_excel(matplotlib.xlsx)8 m1 I7 ]) V7 L u0 L: N2 Q9 E 4 @, ?$ Y0 T( q. s plt.figure(figsize=(10,5))#设置画布的尺寸( }: m/ e- R' a4 U! d plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 3 X) N; j2 T# F8 O! b9 q, |" b- I2 w plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小& X: a0 @9 _5 [; Z plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小4 h: l% _3 w# z h% d * r7 a6 x9 k; \4 P #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型" C# k$ K+ _. k. C( y1 x in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)# a! X6 w% r, Z; I3 `8 f4 @ in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)/ o% D( g+ H; R' v in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)4 J1 E% D( |: |+ n# y- X# k) O + N3 e6 i/ ]7 |3 J/ g plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限& B% f( o/ H0 J2 \, L7 T) @ plt.show()#显示图像; d* X& N# a# R9 k" t
+ S; b, c. y: Q% m1 D, ^( k/ f
6 V5 k' Y$ V$ q' K

4) 管理多个子图

! @' k" z% i7 h8 @! w5 @1 G
import matplotlib.pyplot as plt" ^5 E4 ^5 c3 z9 Z! Q+ Z7 {, h import numpy as np 1 B4 f j+ p' g+ R! u import matplotlib.gridspec as gridspec 9 ]" a* {, t4 s6 Z2 `$ k import matplotlib.font_manager as fm #字体管理器 6 k5 r: `, p7 c + x5 Q7 V! C+ K7 H) y my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")# w6 B1 V8 U) N4 f 0 @( O! i+ }9 u) |. ]& p6 ^5 ~& \ plt.figure() 6 i2 z% D6 k( r0 J0 Y) ~# H* p4 @" H; N ( l7 ^% n; f# A- _5 } x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)/ ^9 g# n) L2 T' S2 @& [ gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列9 E! \/ M! j6 Q0 o ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 $ Z! ?3 s# J2 o% z( y ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) 9 o( e; R- K" m/ |" v ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3): P& X4 j1 w$ f5 [5 V + Z% g5 r9 s, N1 f& f #绘制正弦曲线 8 m. ~# I' S! \7 K V ax1.plot(x_data,np.sin(x_data)) ; h9 i4 X- P2 y; M' u ax1.spines[right].set_color(none)+ W' K: G* \6 q& J; [& j2 t ax1.spines[top].set_color(none), O' H8 x" Y: U; }& V1 y ax1.spines[bottom].set_position((data,0)) : a* {' ]+ |) P! P+ k. c ax1.spines[left].set_position((data,0)) $ x7 }8 I% e4 d) w. s ax1.set_title(正弦曲线,fontproperties=my_font)# k/ k# p) f0 [: {0 p, x8 y 8 H3 c$ j% W* R$ N, z5 i #绘制余弦曲线# P( G! X( ~3 S; N8 Q1 L1 W ax2.plot(x_data,np.cos(x_data)) 0 z4 j M# D- S, R/ i ax2.spines[right].set_color(none)4 X" |; W0 X4 U+ g$ E ax2.spines[top].set_color(none)0 q- k: \# f, D3 o+ \ ax2.spines[bottom].set_position((data,0))7 T+ P1 e$ `' ~' [+ h' e7 b# K ax2.spines[left].set_position((data,0)) / J1 _" m- m9 h1 _% x& A ax2.set_title(余弦曲线,fontproperties=my_font); K/ T) [' S" Q. R1 W& S5 R" d: k 7 \+ W& w. A3 I8 |2 g* p3 i' ^ #绘制正切曲线 + j1 N, `1 f+ _3 Q* h$ k( Z% { ax3.plot(x_data,np.tan(x_data)) 6 h# L* I9 B! {- z& [! n. o' A& K ax3.spines[right].set_color(none) 1 q. d4 P' N5 _. S' ? ax3.spines[top].set_color(none) , w3 c7 Q- x3 R" _( S* t ax3.spines[bottom].set_position((data,0))* U! C* x0 q" Q8 y: J4 B; i7 D ax3.spines[left].set_position((data,0))( c; g1 Y7 B/ z ax3.set_title(正切曲线,fontproperties=my_font)1 ]4 I/ y4 z1 A# s, U plt.show() , L# U+ H% y4 D5 C" P8 l
. K9 l* k* @% n" J; \

结果:

" m4 y" C8 _# D/ X" [
& F: r" U* q' M% E5 O o
I1 K$ ?. ^$ y. K( H$ e, y 1 X0 [$ u/ h6 J j+ W; F' G( ^" x2 X, B3 Q( e ' r. a" g& D- p8 G! z" e' }" B5 j 1 \; m! l1 f1 y: [" K8 l
回复

举报 使用道具

相关帖子

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