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

[复制链接]
, m, y0 n- L2 n/ F& W

原创:宋宋 Python专栏

" z+ K: y$ B6 w! R. A9 C8 i

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

- x2 B+ f6 z6 `1 l+ ^7 p

折线图

% g% r% d6 k, G6 g; s$ ?8 e1 T) Z

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

5 R. u% C8 I5 q7 N5 H+ B

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

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

1) 简单的折线图

5 q4 ?6 U' W+ }. @ m

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

: U) Y3 K1 P% e6 b& X7 `$ G

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

! x, R4 |( k/ K( v' W1 ?) Q
import matplotlib.pyplot as plt + {; `6 T7 W) C. i ) n; ]: f! C+ O2 J$ n6 ^0 D x_data = [2011,2012,2013,2014,2015,2016,2017] ; A, E$ ~6 J6 ], ~0 p) ? y_data = [58000,60200,63000,71000,84000,90500,107000]/ H8 p5 e" M: e0 p8 x z# P 7 p, N3 b) ~, L9 r plt.plot(x_data,y_data) 4 x1 x) \3 {- w8 W plt.show()9 V. Y. B. f3 v3 W: M1 T! K5 e3 s
- |5 W! P2 u Y, j* N" |9 P* H
! i4 x9 ~5 ?7 F9 J: L. ~6 U* K

2)复式折线图:

G6 N) V* \, Q2 {$ E
import matplotlib.pyplot as plt2 w) e: p) ~& H. c x_data = [2011,2012,2013,2014,2015,2016,2017] # K' f: v: q" z6 e y_data = [58000,60200,63000,71000,84000,90500,107000] 8 Q' J% }3 ]5 Q# n+ V y_data2 = [52000,54200,51500,58300,56800,59500,62700] ' F8 f( j7 t1 v g6 {" S8 k( U+ `9 K8 R& H. k: ~* \9 E plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) 8 Z2 B' K% P/ n5 R plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) 1 f$ N* P& B9 X3 d! B0 T& O plt.show() 0 p9 \& _0 p' P) @& N+ b) a/ e7 \8 }
" l& Y/ T2 Y2 _3 `# f, k; [5 d0 U
* o& {0 j( N5 ~& m' t' m0 [; @0 R

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

, ~9 G4 \# J3 A+ @& E% O) E
+ E. q+ `0 }5 b5 G1 v

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

) y1 q: ]: H0 M2 t) \% z9 M
import pandas as pd" ]6 p4 s: v1 l. C import matplotlib.pyplot as plt6 q# T3 b% L& r2 t, k, {" j & I, Q9 z! B+ |3 ^ #读取数据- R# @5 k ]$ K" H: G' O! s5 Y( I data = pd.read_excel(matplotlib.xlsx) 7 ^ G6 S2 ]7 D& C3 B% c( p, Y% {, j3 W) \+ S plt.figure(figsize=(10,5))#设置画布的尺寸 ^# E: R) {4 S9 |" D3 m9 [ plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小( u) T( G' w; R* H) \; E plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小2 k- e- |# z0 y& F plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 3 M5 c3 G$ s. M0 y' L' U4 x0 n" G$ t6 ?4 t5 [ #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型9 S: W" `- k: q# c8 p in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) $ Q5 z7 z3 G1 e3 c% N: l: `( t! Y in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+). u5 O: D- R9 h in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*) * w! l% P( ]# n; `/ E3 t! y: E ' E! T) ]/ j4 T* K1 W- c plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限& P* _4 ^' d6 L! o# p( a( T$ H/ M* a plt.show()#显示图像* D9 w. i/ k. h2 Q3 h7 L. W3 v
. J0 |( n. h* i! i
1 S( l0 Q- F" t, {% b$ I) R. E

4) 管理多个子图

5 r( V' S& b9 Z& I2 D
import matplotlib.pyplot as plt 8 c4 W. j5 D0 t' H import numpy as np2 o9 `4 t+ G8 O0 N; U: S import matplotlib.gridspec as gridspec # w x3 W: B( I+ g import matplotlib.font_manager as fm #字体管理器' [. w% n8 [' {7 q" V1 r: U/ H 1 L! `3 A/ r+ G! [$ c my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc"). B" v- ^5 L- F+ W5 R 9 ~' e- V. y* n" I% [- n plt.figure() 0 P& y2 U% ~& _! a: A8 G, s% w. G3 b+ y# Z x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)( E3 B0 ~, b W+ ] gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列, s$ @$ F" l: o9 |0 P; e ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行5 y+ T+ y2 y: ~' t- X ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)7 g+ d# T& \& g: v8 V+ `+ e ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3): ^3 Y: e& X! U, q( e r ; y2 b4 a# l( q: W, q- y #绘制正弦曲线% k' Z/ O" B: m& e" Y. G# s! x ax1.plot(x_data,np.sin(x_data))* |1 i$ U I0 s- M; P I+ }3 V ax1.spines[right].set_color(none) % v9 ^+ T6 b8 }1 T0 f5 q ax1.spines[top].set_color(none) / {( A% R4 A% m ax1.spines[bottom].set_position((data,0))7 q4 `) [; l, T" B( W9 x ax1.spines[left].set_position((data,0))# t _" }& R! p' ~! Y" _ ax1.set_title(正弦曲线,fontproperties=my_font) 9 ?0 y( |) g6 _0 Y + j! y7 z2 l9 K: t7 w #绘制余弦曲线 0 m" J) \# t: B) i: h! d7 l1 p/ _ ax2.plot(x_data,np.cos(x_data))& ?+ f/ i8 K9 D ax2.spines[right].set_color(none)5 Y, z0 R v" T" B8 V ax2.spines[top].set_color(none): q+ Y0 k. [! B0 [* c) Z( d9 [/ O ax2.spines[bottom].set_position((data,0))0 ^! c2 q/ ^" a2 G6 s; X# U0 W3 i ax2.spines[left].set_position((data,0)) ; J5 Q B5 z2 V: z8 p$ x" j ax2.set_title(余弦曲线,fontproperties=my_font)+ u: d H) f! k. h 5 t9 J6 h) G# U5 M/ u/ e' X; d #绘制正切曲线5 u# h% \8 H. p4 p; I$ B$ | ax3.plot(x_data,np.tan(x_data))1 u' L5 z: o0 b% Y: ^1 P ax3.spines[right].set_color(none) r& _( ]! g/ v3 o7 f; K9 N$ d ax3.spines[top].set_color(none)! n4 {/ N' ?4 b7 N9 S' k c8 X h ax3.spines[bottom].set_position((data,0)) H, Q- h+ e) {5 v% h ax3.spines[left].set_position((data,0)) + b, q, O; Y3 Q7 j# [- w# U ax3.set_title(正切曲线,fontproperties=my_font)+ w/ e$ |+ _6 u6 X& Q$ U, p plt.show(): e2 d2 U; U4 h0 Z, _% s
0 \. s0 O. l+ m5 t

结果:

& y; X. p( ?+ H7 T8 k9 @7 P3 L P1 @
) Z. i$ Y- s" n: j( G
6 S! `$ ^- O6 N" H" x& b9 R4 w! ` k1 N* p8 O+ C& l/ {% @3 s1 G* v7 l9 n* X ' h3 U' |/ L" b7 X! Q; V% D3 K- ~$ W0 J* l4 y. `/ X
回复

举报 使用道具

相关帖子

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