|
/ `0 {! p) P/ U 原创:宋宋 Python专栏 . g! c8 E# p! m) w; a4 a
来源:Python数据分析:折线图和散点图的绘制 : d4 Z5 h" L+ U+ ?4 r
折线图
% K* ? j* Z3 A3 }, Q 折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 . T2 `9 o/ ^) o
Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下: matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)1) 简单的折线图 1 l* P, d( B u! }
在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。 + q5 y# q) M+ J% w- q
plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。 % @6 G! ` s- T- d
import matplotlib.pyplot as plt* j( A" ]" r; R6 ]
" `. d; P! L& F1 C
x_data = [2011,2012,2013,2014,2015,2016,2017]1 B# @) @( J4 M% {. U! X- [9 Q# ?7 m
y_data = [58000,60200,63000,71000,84000,90500,107000]
- P6 b2 q U5 a1 Z
- O0 h9 o4 c) I3 @ plt.plot(x_data,y_data)
" A* {- ^- [; T. a4 ]: p plt.show()
5 R) T* n& G6 d: z
3 h! [2 b$ }' u: m& t' z8 T9 s. ] h$ ?# M9 {
& Y; _4 T% T" S* l: a$ ]) l 2)复式折线图:
+ r S4 J* k$ D, x import matplotlib.pyplot as plt
+ p) l' W8 L4 n1 B/ Q x_data = [2011,2012,2013,2014,2015,2016,2017]
$ m6 Q# B a% M# e) f1 F3 O y_data = [58000,60200,63000,71000,84000,90500,107000]
" I F, R3 L$ G y_data2 = [52000,54200,51500,58300,56800,59500,62700]9 p) ]$ J5 T# z, w
( F. z$ m% p& t( s
plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--)
5 C4 s' B0 h; W3 \' j: Q plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)
9 ~+ Z. F/ u. A! Z6 e plt.show()
2 g7 ?. ~5 t; P) E3 O6 u. w; ` # A' }0 m3 L3 _" `. y
9 ? m# H r! i 注:说明:参数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 是指标记点,有如下的:
3 g4 i4 s% t1 M$ w! {3 S. L v/ S; i; D3 ^7 a, U$ `" v' g
3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例
- x* _5 P. l% a& o( s# }( Q% T7 C import pandas as pd; p0 ?6 Y) Y+ [0 k9 j( |- K% e
import matplotlib.pyplot as plt' j2 U) X# k& Z" |( K- d
" f. }8 M/ d# x% J #读取数据
7 V- q( U. j! @8 m( R# W& V data = pd.read_excel(matplotlib.xlsx)( j9 A7 I- `) g& q: v i
2 n& P4 s% v$ w8 J: h" B3 e+ B; L3 m plt.figure(figsize=(10,5))#设置画布的尺寸
9 { |/ H+ P" j* K plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小+ b H$ @$ X+ W3 ~# U
plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小
9 C; {4 V8 j* h7 g plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小. s2 T$ m& u& P5 @2 s% q! N/ |; C
$ H! R" I9 q/ Y7 }0 f2 N& j& ?
#color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型! \, f9 q1 J, r
in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o)
$ i2 Y" z( c2 x$ B+ T in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+)
7 |3 {6 t9 r- o% \* H in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*)% c }' N: l# q# u
# ` [0 ?% e/ Z9 m9 Y5 c plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限: S* D" k8 Q w) p/ L l, p$ p
plt.show()#显示图像8 l- h' J! |/ n
& d8 m0 @" U$ K* \/ t: v: ]9 @
4 ]* E6 u( K+ g% t/ _ 4) 管理多个子图
O3 a$ h% y: T# C" f) u' A# w! s* A import matplotlib.pyplot as plt
/ |+ {6 _) J5 F" |$ M$ g# v+ ` import numpy as np
& w5 b% |) @. h' | import matplotlib.gridspec as gridspec5 i: A2 d4 \* T
import matplotlib.font_manager as fm #字体管理器' ^2 m% B& b) w: b1 j, M
# r# G$ ]3 y7 R* b% G9 y* @ my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
* O: ^4 F: ^( p& o( j8 C
( J* u$ c& Z# l6 \& K plt.figure()
; m+ t' v* `9 S, J* t) \; Y) g8 e2 [7 c6 D3 T) F. I
x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)" e8 ]. Z5 G/ G) x i
gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列
0 e) j( j9 i7 K ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
# u v) }; z1 o# k1 J ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) C# L) p" {/ p5 p% Z
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)
! X. g; b8 C; @: Q" _/ g( n! A% H8 t
#绘制正弦曲线
4 ^/ @7 f" n4 i+ W; p0 O9 Q ax1.plot(x_data,np.sin(x_data))8 |: b( B8 }/ p1 m4 y v- G& @. x
ax1.spines[right].set_color(none)
) M6 j# \4 h/ s; ~" L ax1.spines[top].set_color(none)
8 S$ g0 v4 K" G9 g# t( o ax1.spines[bottom].set_position((data,0))
! O r" ^9 G: F3 g7 `9 a0 o ax1.spines[left].set_position((data,0))
. A3 w/ B6 R& q6 \! ]; X ax1.set_title(正弦曲线,fontproperties=my_font)( H3 s% N4 V' j
9 b8 _+ I) c5 }0 G% P: Q$ a #绘制余弦曲线
6 }& ~4 [6 { M5 R ax2.plot(x_data,np.cos(x_data))
7 w( X. p! Q: s7 e, E# F* i- N ax2.spines[right].set_color(none)/ F8 n0 r# X3 `& d
ax2.spines[top].set_color(none)
6 j/ i, S0 d) M& V8 P ax2.spines[bottom].set_position((data,0))
4 o. T5 W! s1 M' z$ x. O8 @6 [+ { ax2.spines[left].set_position((data,0))
6 J/ P. f8 f# K f) Y# {) H ax2.set_title(余弦曲线,fontproperties=my_font)
! [, w2 O) Z9 ~; N$ o7 K
% S. y9 y$ h, X, P# e* O4 E/ S #绘制正切曲线
* ?1 x+ _9 O3 \$ o4 C% G- b/ S ax3.plot(x_data,np.tan(x_data))9 N g/ i) A f9 f+ B( ~2 Y+ M
ax3.spines[right].set_color(none)
( V- F6 ]: L; W ax3.spines[top].set_color(none)
9 y3 ^8 }) D! I- U5 _ G' ? ax3.spines[bottom].set_position((data,0))
8 x* _) t* u: f4 Z: h ax3.spines[left].set_position((data,0))4 Q# ^) z) H& X! c+ c9 x
ax3.set_title(正切曲线,fontproperties=my_font); H. @9 o- X1 A2 }
plt.show()
7 Y3 D: n5 j( B! t3 [ 6 c3 E& ~( h: I! k
结果:
$ {$ n/ a+ W1 \, i
9 S$ ~2 I& J/ _2 u& K ^. p$ ~3 r5 a$ Z
4 @' `0 Z' ^0 K% Y" |) R j3 H: a0 u1 e$ z
6 q2 K& H% I+ B( E
& c+ b3 l w) B4 ]! T9 R
|