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

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

[复制链接]
' r- H7 ~9 q: Q! }) Z

原创:宋宋 Python专栏

7 |, X5 Q5 k4 ?/ w4 m

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

/ {; t1 E* W1 o1 e

折线图

9 Y: ~8 W4 A8 o3 M! X

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

/ B& o3 @( I; J N& C, W* M

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

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

1) 简单的折线图

- N4 \( g) u1 V- w4 Y1 a4 D

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

- c9 ]- U. j+ y; x; Z7 A) m* d

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

2 x/ R3 i. w; Q( D7 D0 ]" q9 d
import matplotlib.pyplot as plt E7 N- z4 {: g5 I; d 6 ^7 c) Z7 n, D. X5 w# ~ x_data = [2011,2012,2013,2014,2015,2016,2017] " N- Z: a8 a; e8 j0 W1 W$ {" q y_data = [58000,60200,63000,71000,84000,90500,107000] - W2 I! i* K7 Y0 O P3 \( n' s , ]0 l N$ y: B5 k' F plt.plot(x_data,y_data) 5 z& N' Y6 b- A4 d7 \1 M2 T* b- L plt.show()+ C2 @4 G3 _# m. t: X5 p
8 |: H7 H- T0 U$ A' l- [4 G
$ s+ X5 }4 I N+ }

2)复式折线图:

% r5 U D1 }, O
import matplotlib.pyplot as plt 2 K! b( c" j- h' Y: o6 G- D0 R x_data = [2011,2012,2013,2014,2015,2016,2017] 9 M( }( H$ e! F7 r/ D8 h) m y_data = [58000,60200,63000,71000,84000,90500,107000] T# i( M; {/ X. J/ i y_data2 = [52000,54200,51500,58300,56800,59500,62700]& k, D7 @: n2 ^( ] 2 J' P. W& ]; K$ r; C) \ plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)7 ~. o) D. o5 O# T plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)8 ?" r! W" V- z8 [ plt.show()% ]" i; n! F9 G
% D: D9 y: x6 `" v/ } P4 N* ?
2 K5 I5 [- t6 y

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

2 M2 a" c6 F" x) f$ `# g. q
, D i8 w# g, h

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

5 J" s/ u/ d( ^7 b& W0 _
import pandas as pd4 F2 Y$ G& }- p- K" A& g import matplotlib.pyplot as plt- J4 P" P' Y1 q5 s1 { 9 ]! Q$ z% R- L- o0 n0 j; P #读取数据* @; m$ E* j( S( P7 | data = pd.read_excel(matplotlib.xlsx) 0 M6 Y' Y6 z+ m5 w ( i, |7 y5 g/ l8 j, R plt.figure(figsize=(10,5))#设置画布的尺寸 - L! {, l6 P' n3 ?8 a! `% } plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 + s. P& g, B g$ [$ P( q plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小7 R' ^" U+ c* n" W3 [; O6 G( ? plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 1 }* C2 @2 p: b& ]/ v) \& b 5 T, W2 h; ], u! I! u5 Q' x8 \ #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型 % S3 P- Y. r) k. h* `1 d in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)- q& V/ S# l: {1 ^" Z% K in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+) ; o! q: C3 u0 M( o N# @: f2 n, `' @ in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)7 R' T1 Q8 R/ Y2 z2 e7 }1 C ) L( E! I; A1 b- [! R* Z* [! Q plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限 y7 E2 r" D; p7 P6 _ plt.show()#显示图像7 T) P) d9 }8 Y. z; J# t
7 m [% [" m/ i$ J6 P' l6 \
1 |0 P5 l' f6 N- K! U. b( t- J3 I$ s+ n8 t

4) 管理多个子图

8 ]) k; D2 u6 M/ L
import matplotlib.pyplot as plt % j1 q' m) h* l. K4 y8 X& t8 x7 d import numpy as np5 D$ _1 R' @5 F3 Q! K3 E% f import matplotlib.gridspec as gridspec ) d* Z. E$ n4 b( j* q import matplotlib.font_manager as fm #字体管理器$ X/ q. {6 f% m2 O 7 S/ t$ }* l' j" z+ R my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") $ D2 a. K- _( W G% L, Y$ ^ % `( A& x7 Y' U plt.figure()' R; y& a8 U4 L8 q! v; c , A# }4 E$ h, k" s1 S4 ~- D x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)& D- j: V1 D) A, x gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 2 G0 y! q0 |) i% S n" N, R+ e9 a( B ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行9 B- | ]; ]5 |4 h ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) : M) i% X4 `' P6 M- b; L3 ?8 d# k& G ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3) - b3 ^1 v8 B' z2 Y% K1 Z8 r 8 z/ b5 T- a: ` #绘制正弦曲线 : O+ f% e0 v9 q+ b* E: ?8 v5 g ax1.plot(x_data,np.sin(x_data)) - c$ j1 l8 H# C+ G2 F( G5 m ax1.spines[right].set_color(none) G( ^6 j4 K2 ^/ [ G ax1.spines[top].set_color(none) * a1 v1 s. c) n T& L; M1 W ax1.spines[bottom].set_position((data,0)) * S0 o ^! @+ M$ r% e2 }2 Q) x. ] ax1.spines[left].set_position((data,0)) z& m. ^" q4 P4 C% ]3 ^# S% n ax1.set_title(正弦曲线,fontproperties=my_font)% y1 z |' J! _7 t0 j $ c* R# ~6 m8 A( L8 n #绘制余弦曲线; x9 s3 X" l6 _$ Q' R: x) T3 N) E ax2.plot(x_data,np.cos(x_data)), D* C% |, H6 M, D6 [4 D ax2.spines[right].set_color(none) ! ^2 @; p1 F; C5 H ax2.spines[top].set_color(none) / X+ p5 v0 X" d6 T4 N* u, h4 W ax2.spines[bottom].set_position((data,0))$ I$ d$ A, Z- t( o: x& t. P5 \ ax2.spines[left].set_position((data,0))6 `: d3 Y* g* k( ~6 X. j% B/ T ax2.set_title(余弦曲线,fontproperties=my_font) * p- O; t% V' L8 D2 `; S. h+ R- I: a" ]1 c' e1 Y* B; t. O #绘制正切曲线# i* E# l( w5 p, Y) g7 _ ax3.plot(x_data,np.tan(x_data)) d+ G% o: t. B& _3 ` ax3.spines[right].set_color(none) ! |* ?7 w4 u- c( ]% A ax3.spines[top].set_color(none) , {4 w6 I* d. u ax3.spines[bottom].set_position((data,0))) k, G5 B1 H- s9 u ax3.spines[left].set_position((data,0))1 U% F0 ?: l) P: ?2 u9 Y3 s ax3.set_title(正切曲线,fontproperties=my_font) - K1 D8 P2 n6 f) p: V R( } plt.show()3 B& R- |$ A' i" i6 O7 s+ K! q
% N( o) P- U! L; O

结果:

6 @( a! w8 |2 t4 l/ M0 d
1 P- C; H" \( S% R" q. W$ I
) a! ?; I! G: s+ C- ]8 B1 K" u 0 a8 ^' _8 p+ C+ x* w' O , A; J [2 h" P5 Q% { / L% G0 j4 s2 p) M6 N8 v. j) A 4 B7 z9 R, a- b0 [4 u& P. [
回复

举报 使用道具

相关帖子

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