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

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

[复制链接]
3 i" a7 j) g2 k. I; X2 [; v

原创:宋宋 Python专栏

( n3 ^( ]* F/ e

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

8 ]) Q3 x% R: o9 c

折线图

0 f9 j% n! b3 J& @6 C3 i" ~

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

' ~& C& D1 Q& D: E* L

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

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

1) 简单的折线图

, ?& ]4 G2 d8 p( s$ ^3 o

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

# U2 r. L+ f/ X" B F

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

4 P B9 K' _1 p/ O* t; v
import matplotlib.pyplot as plt) |! J4 p9 U0 \ 4 A( z0 F0 {% D% @ w) A# U x_data = [2011,2012,2013,2014,2015,2016,2017] 0 ^' P" W, ~) b6 H1 p y_data = [58000,60200,63000,71000,84000,90500,107000] : O: b% O/ A* K5 W, T" b. }. \ / e& y4 v# S0 v. B8 N# D% Q; M plt.plot(x_data,y_data) 5 @. w- `6 k9 [ plt.show() , f$ b y, _8 ?8 T$ f( W+ ]
c% F" W5 l& r" `- S( X- q
8 Q3 f. ?# z. N9 h* b4 M, \" \6 B

2)复式折线图:

* @1 k" R) E* l) C! U: J, w, _
import matplotlib.pyplot as plt9 s- h% q, R7 C; ^) U+ P x_data = [2011,2012,2013,2014,2015,2016,2017]& ]3 Q r% P& J* ~ m2 V( g y_data = [58000,60200,63000,71000,84000,90500,107000]7 W8 m& @- j* e2 T$ `$ P4 f V+ C y_data2 = [52000,54200,51500,58300,56800,59500,62700]3 d( h3 }: e9 @2 p( U # F# m5 i8 g- ]* S0 ^ plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) * b( m2 W( E$ n plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.) ) C1 |: L; ?3 ?3 C9 A5 T plt.show()4 [2 W+ u$ H: K& U; q$ v; P
, _ D6 I7 b6 k b& l. e
9 u8 t; E- f( S; j6 \4 X

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

, ?( k& E1 \* \* |
# _' `1 o [ N+ s( n

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

* m5 F* L" E; u4 Y/ W1 Y
import pandas as pd. y3 ?4 w, P5 B! ]* o import matplotlib.pyplot as plt * e$ E8 a4 _( D& z2 E ' B: _7 b" O" L8 \2 u) }6 y& f #读取数据 6 k9 O0 b0 ~3 d c/ f+ n% `0 Y data = pd.read_excel(matplotlib.xlsx), p' b0 x8 z" y" W f/ ~ 2 ?1 f6 ~* Q+ a0 K0 `* u% s9 n plt.figure(figsize=(10,5))#设置画布的尺寸: _4 s3 V( U2 ~ plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 6 p& _$ _5 m0 o4 a plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小 - A7 i7 q( {+ \% f$ G s) K( u plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小 & P- i' R: I- I( P* R$ m/ ^4 u7 U. C. z) n6 o #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型 ' [; R- o+ l. N7 F3 F/ v* y in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)7 O% G3 s* d0 _! l/ L4 f in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+) : l; u7 w( p6 _; i in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)+ Y, z1 w$ a, n( Z4 o- X ( B$ M* \: h( J( a plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限 & O' B1 M, @# S2 a plt.show()#显示图像 4 p' s, {$ j8 ]; m" a3 C
- e6 y) K8 q) F W9 J+ K" B5 s
3 u% q) G& c1 D% g

4) 管理多个子图

! _: \& B$ J& ~2 A/ ~
import matplotlib.pyplot as plt! S) o& Z$ w4 z3 L* t9 } import numpy as np. B4 q6 \6 V- G! g) x: m: l import matplotlib.gridspec as gridspec * n2 C( U; i. s# \- @; g import matplotlib.font_manager as fm #字体管理器( A2 C$ F0 ?: @" J1 M3 M$ @, o * L" R7 r& v; _, s$ m- m) \9 t my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") ; K- `) ?; Y [( `' g & E3 K" Q, b0 `6 V# e6 s1 w9 S- d: e plt.figure() ( ?3 w& }. j o9 X, w/ t1 @% Z: y: m7 W x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)% J" p: K2 z" v) c gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列. _! d& f( r) G+ E% F9 J ] ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 ' _1 f$ d) L" ? ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0)# E5 T5 K2 S1 `' X' u. L8 H! f ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3): d/ P+ b, |4 P6 d " g+ R$ M' t6 \/ L, y, E; B #绘制正弦曲线 f8 ]- [- h" G4 n3 d( G ax1.plot(x_data,np.sin(x_data)) 1 W& ?* r7 y, }: |8 Q0 m ~0 N ax1.spines[right].set_color(none) ' V4 I+ p6 U0 T ax1.spines[top].set_color(none)/ P3 t" p3 G# D# o$ N$ c ax1.spines[bottom].set_position((data,0))+ a+ M5 f" U/ a4 \/ y7 i ax1.spines[left].set_position((data,0)) 7 w1 S2 `9 g7 ~ ax1.set_title(正弦曲线,fontproperties=my_font); S% P# O7 }- f0 r4 X: h' ~ : d6 B7 o1 p+ H { #绘制余弦曲线/ L; [; s; b% V5 A- V8 ?4 i! y ax2.plot(x_data,np.cos(x_data)) : q6 U' [* N. h8 W$ O0 }7 Q ax2.spines[right].set_color(none)) X, U& D3 Y# ^+ w! b" v$ R& V) G ax2.spines[top].set_color(none)& y" e, A9 r: }; H ax2.spines[bottom].set_position((data,0))4 }5 Z) ?% U# O8 o( b) ~4 X) F ax2.spines[left].set_position((data,0)), A/ R {& U( B; W, H# S ax2.set_title(余弦曲线,fontproperties=my_font) 6 Z! |: @/ s$ G6 P; { 6 s( r8 b, t3 P( X o1 H& u- j, O6 G6 B q #绘制正切曲线! B$ D* x3 a0 q0 I. Y" l( ?- g0 q ax3.plot(x_data,np.tan(x_data)) 5 z ]! v B" N1 K# R' g X ax3.spines[right].set_color(none) & X9 }8 H0 j6 t( Z4 S ax3.spines[top].set_color(none) ; j8 R' b$ |4 E# r \' D ax3.spines[bottom].set_position((data,0)) 6 k; W. H" L' e2 R6 I ax3.spines[left].set_position((data,0)) F* j1 p3 x/ z+ c ax3.set_title(正切曲线,fontproperties=my_font) 2 {6 M$ E1 ~3 k0 E9 V' M. a plt.show()$ X) E0 U% j- R |
: L9 Y8 i' S! h9 L

结果:

! U3 `% a+ m# H( D1 g+ @. @, C( ?
# k( `9 c6 U8 u8 c% ]
; I- X/ \* |% O' ^, Z7 E ~! m( @+ G+ `0 e % }8 k4 h8 {7 Z r t( r/ b. t* X $ q; G! |" f0 F* w/ B
回复

举报 使用道具

相关帖子

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