Matplotlib的图像是画在figure,每一个figure又包含了一个或多个axes(axes可用于指定绘图的子区域)
import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
import numpy as np
默认会构建一个figure,上面只有一个axes
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.show()
效果和默认画图一样,但是可以指定画板figure大小
#fig = plt.figure()
fig = plt.figure(figsize=(6,3)) # 自定义画板figure大小
#ax = plt.subplots() # 创建一个包含一个axes的figure
ax = fig.subplots() # 该写法和上面一个结果一样
# fig, ax = plt.subplots() #也可以fig和axes一起写,结果一样
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]); # 绘制图像
# plt.show()
Trick: 在jupyter notebook中使用matplotlib时会发现,代码运行后自动打印出类似
①在代码块最后加一个分号“;”
②在代码块最后加一句plt.show()
③在绘图时将绘图对象显式赋值给一个变量,如将plt.plot([1, 2, 3, 4]) 改成line =plt.plot([1, 2, 3, 4])
line =plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
完整的matplotlib图像可以分为四个层级,分别是:
①Figure:顶层级,用来容纳所有绘图元素
②Axes:matplotlib核心,可以看做是子图的容器,一个figure可以由一个或多个子图组成
③Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
④Tick:axis的下属层级,用来处理所有和刻度有关的元素
matplotlib提供了两种最常用的绘图接口:
① 显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
② 依赖pyplot自动创建figure和axes,并绘图
先介绍下np.linspace这个函数
在指定数据范围内,以均匀步长生成指定数量的数,包含收尾数字
# 在[0,10]之间以均匀步长生产5个数字
s = np.linspace(0,10,5)
print(s)
plt.scatter([1]*len(s), s)
[ 0. 2.5 5. 7.5 10. ]
X = np.linspace(0, 2, 100) # 在[0,2]之间生成100个均匀步长的数据
X
array([0. , 0.02020202, 0.04040404, 0.06060606, 0.08080808,
0.1010101 , 0.12121212, 0.14141414, 0.16161616, 0.18181818,
0.2020202 , 0.22222222, 0.24242424, 0.26262626, 0.28282828,
0.3030303 , 0.32323232, 0.34343434, 0.36363636, 0.38383838,
0.4040404 , 0.42424242, 0.44444444, 0.46464646, 0.48484848,
0.50505051, 0.52525253, 0.54545455, 0.56565657, 0.58585859,
0.60606061, 0.62626263, 0.64646465, 0.66666667, 0.68686869,
0.70707071, 0.72727273, 0.74747475, 0.76767677, 0.78787879,
0.80808081, 0.82828283, 0.84848485, 0.86868687, 0.88888889,
0.90909091, 0.92929293, 0.94949495, 0.96969697, 0.98989899,
1.01010101, 1.03030303, 1.05050505, 1.07070707, 1.09090909,
1.11111111, 1.13131313, 1.15151515, 1.17171717, 1.19191919,
1.21212121, 1.23232323, 1.25252525, 1.27272727, 1.29292929,
1.31313131, 1.33333333, 1.35353535, 1.37373737, 1.39393939,
1.41414141, 1.43434343, 1.45454545, 1.47474747, 1.49494949,
1.51515152, 1.53535354, 1.55555556, 1.57575758, 1.5959596 ,
1.61616162, 1.63636364, 1.65656566, 1.67676768, 1.6969697 ,
1.71717172, 1.73737374, 1.75757576, 1.77777778, 1.7979798 ,
1.81818182, 1.83838384, 1.85858586, 1.87878788, 1.8989899 ,
1.91919192, 1.93939394, 1.95959596, 1.97979798, 2. ])
fig, ax = plt.subplots()
ax.plot(X, X, label='linear')
ax.plot(X, X**2, label='quadratic')
ax.plot(X, X**3, label='cubic')
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend()
plt.show()
X = np.linspace(0, 2, 100)
plt.plot(X, X, label='linear')
plt.plot(X, X**2, label='quadratic')
plt.plot(X, X**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()
matplotlib的知识点比较繁杂,不可能全部记住,实际应用时随用随查,因此这里提供一个通用的绘图基础模板,后续再基于这个图表进行填充优化
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须的,样式也可以在绘制图像是进行设置
# mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 定义布局, 这一模块的扩展参考第三章进一步学习
fig, ax = plt.subplots()
# step4 绘制图像, 这一模块的扩展参考第二章进一步学习
ax.plot(x, y, label='linear')
# step5 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend() ;
(1)显式创建figure和axes,适用于需要绘制多个图,调整子图格式的情况,比较方便,但是对于绘制一个图的时候,比较麻烦,还需要多写一些代码
(2)依赖pyplot自动创建figure和axes,不方便调整子图格式以及子图间距
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须的,样式也可以在绘制图像是进行设置
# mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 定义布局, 这一模块的扩展参考第三章进一步学习
fig = plt.figure
ax = plt.subplots()
# step4 绘制图像, 这一模块的扩展参考第二章进一步学习
plt.plot(x, y, label='linear')
# step5 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend() ;