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

[复制链接]
. Q+ N7 {3 F$ o

原创:宋宋 Python专栏

$ N2 n& a s% @6 Q6 h! J

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

5 C% P& b& m7 Q5 g$ Y) i; y, H

折线图

- C* P0 g+ O1 p- T

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

6 O( W- z' x- K' H- ~% n; U

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

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

1) 简单的折线图

- t0 z5 J6 p* w" q

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

) W4 D/ [7 ]- Y

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

% }. \8 h- y, a' u2 Y a& t, l5 v" W0 r
import matplotlib.pyplot as plt. e9 k3 N' ~4 p3 | * o# Q; P( w7 s9 h4 }+ |# z/ `7 x x_data = [2011,2012,2013,2014,2015,2016,2017] % A* f) {0 V1 e6 _ y_data = [58000,60200,63000,71000,84000,90500,107000]9 m& K( D1 s% t - S& u0 p' K: s plt.plot(x_data,y_data)9 F$ n) h: p0 A9 B" l/ Y' [ plt.show() p% n( ] a8 H( Y6 g
- y- B# ?" F6 V: S
8 g/ O1 U, r+ X& }, [! P

2)复式折线图:

0 t7 b7 h0 O1 A% `. D* ^ t- G4 i# E
import matplotlib.pyplot as plt6 e! V" o T" N! P. p x_data = [2011,2012,2013,2014,2015,2016,2017]( g) X- t1 I9 T2 m6 b7 p+ I! q. s y_data = [58000,60200,63000,71000,84000,90500,107000]& F* `& i( E, m5 b- y/ ], S y_data2 = [52000,54200,51500,58300,56800,59500,62700] 2 j' m, q% u2 [* @- {8 H; T' N3 p9 m; h- N3 ~- v2 V plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) & e7 u; M; u# N1 p) a/ t. \: y. o* r plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)" c2 W5 J9 K/ N plt.show() 6 m6 i& {; @, o
4 L7 t# C9 b% d3 y3 C/ }
' L, C* U1 l4 r! q9 R% 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 是指标记点,有如下的:

" {4 Y5 m% g7 T9 r0 W
. \8 N4 @" w3 f) t& X$ {# }

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

. B8 c5 f! S: p+ a- d R. J) h8 ~
import pandas as pd " V' L }0 m. Z+ }- \. H5 I! P, S8 _ import matplotlib.pyplot as plt4 O( k2 y2 C+ \2 p ; H/ D* Q4 N8 C9 ~ #读取数据3 [8 Q; o4 o$ q2 H) B9 u data = pd.read_excel(matplotlib.xlsx)7 m+ b b9 U0 ?8 \( g ( z2 f2 @4 v8 y plt.figure(figsize=(10,5))#设置画布的尺寸- ^2 K9 d2 w: g% `+ n" z3 |9 U7 E I& @ plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 ) t! Z, ]6 \, A3 B7 c3 U) R& f# U plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小- v+ v0 j7 X0 L$ k7 H plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小0 z( f* q4 g C _% ?6 r: X ; b0 p4 _: w# j5 [ #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型 7 {! B( }% Y% Y in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)/ W6 v# k( E* F in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+); p4 v- }' Q% E' H in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)' g! m; G$ ~ r, J+ G1 H 2 Q6 ]: O9 j9 y! n. i plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限1 s$ Q2 h, M% o! G% b7 N6 p3 \ plt.show()#显示图像 ; t: P7 u1 f$ |0 w# C( R6 o9 C
4 k6 N% `8 E; g6 e- i4 x
7 x' p* n$ T7 e6 W# N

4) 管理多个子图

! C5 B- m+ g- J1 G
import matplotlib.pyplot as plt & h! h# ^0 A3 d' I3 M: g/ f import numpy as np' P1 R6 v8 D+ _% Y; m import matplotlib.gridspec as gridspec6 z: w; |4 I# R7 E! G# ] import matplotlib.font_manager as fm #字体管理器 - o4 _ k( L1 \7 C L+ c$ [* h 8 a: Q8 j. l8 p' B my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") # f8 W8 G; b. \6 t: V4 [ @1 i 9 c3 b4 Q) w, c m" e plt.figure()' z) u8 p, ~5 W( o + F' {* W# ^$ ]$ H x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)3 Q: Q; a: d; P2 @6 y* |$ }! g gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列5 ^& t# Q: N* q: `' ~% z! U" ? ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 0 L7 g- G- q4 w% K7 ] ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)& D+ i0 X9 u; T2 c( I; o! k5 K0 u2 [ ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3); U: b% [. Q9 F% p 5 X) X. I- W0 V4 q7 l. w3 ^ #绘制正弦曲线2 ?- C$ S* c$ j" B5 L% [ ax1.plot(x_data,np.sin(x_data)) * @. ^1 G3 R) V4 k: i ax1.spines[right].set_color(none)+ o, k* W$ H% L1 j ax1.spines[top].set_color(none) 1 @6 ]! p( Z; W4 M1 m1 A ax1.spines[bottom].set_position((data,0)) . O3 ]- N8 P9 R) O1 ` ax1.spines[left].set_position((data,0)) 7 ]3 D' N- Y- E7 U# D# O ax1.set_title(正弦曲线,fontproperties=my_font)8 e5 m" \0 R8 \8 J & _" J! m2 B% _ #绘制余弦曲线8 A0 ~' ~6 V: C ax2.plot(x_data,np.cos(x_data))9 A2 g5 X) l3 G. C ax2.spines[right].set_color(none) 3 z: E, i+ _" R+ Y$ z. W ax2.spines[top].set_color(none) - _ f3 {5 W/ R ax2.spines[bottom].set_position((data,0))( s2 N* p# E+ D$ P0 v ax2.spines[left].set_position((data,0))4 C+ S- ]/ ?0 B1 ?) F7 E* A ax2.set_title(余弦曲线,fontproperties=my_font)0 x" E% ~6 q ]9 B6 Y + s* i3 ~9 B) }, I" Y4 T$ U #绘制正切曲线 0 s- h! P7 k: U. d2 e* w% } ax3.plot(x_data,np.tan(x_data)) % S+ f& A5 S( ^+ M% T ax3.spines[right].set_color(none) $ h6 I, w8 g+ K- X a, J ax3.spines[top].set_color(none)* f& t" S7 m) Q- r* |$ z ax3.spines[bottom].set_position((data,0)). K- T5 g O& T ax3.spines[left].set_position((data,0)) 1 h6 q5 I4 S6 j/ H ax3.set_title(正切曲线,fontproperties=my_font)+ o( I! v. P! q6 [- a plt.show()7 x; K! N y3 B! ]' H& G( p
?1 ?% I) f, [4 s" `" ]0 a

结果:

" K; S2 s, p S- [" [" B0 e
% Z5 X9 z. ]5 G
8 s5 |( G9 Z4 x% }/ q 9 A6 x, d2 y/ O7 E$ y 2 I6 D' P( l$ [" n # t% h* O3 j$ Y; s* q4 V2 G& p# G - @, O& j" b% w. Q4 y L$ V; F& f
回复

举报 使用道具

相关帖子

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