Matplotlib 是 Python 中类似 MATLAB 的绘图工具,其能方便地实现数据可视化,熟悉 MATLAB 的也可以很快上手 Matplotlib。
Matplotlib 模块构成:
1)Figure 在绘图前,我们需要 Figure 对象,可以理解成我们需要一张画板才能开始绘图。
2)Axes 有Figure对象后,我们还需要轴,没有轴的话就没有绘图基准。
3)Multiple Axes 除了添加 Axes 的方式 ,还提供了一种一次性生成的方式。
4)Axes Vs.pyplot 的作画方式只适合简单的绘图,快速的将图绘出。在处理复杂的绘图工作时,我们还是需要使用 Axes 来完成作画的。
创建 Figure 对象,展开画板:
# 导入 Matplotlib 模块
import matplotlib.pyplot as plt
# 展开画板
fig = plt.figure()
创建绘图基准,x/y 轴:
# 展开画板
fig = plt.figure()
# 添加Axes,参数的解释是在画板的第1行第1列的第一个位置生成一个Axes对象来准备作画。
ax = fig.add_subplot(111)
'''也可以使用 fig.add_subplot(m,n,x) 的方式添加Axes,
前两个参数确定面板的划分,最后的参数表示第几个Axes,
例如,2,2,1 就是会将整个面板划分成 2*2 的方格,并显示第1个Axes。'''
# fig.add_subplot(2,2,1)
# 定义x、y轴的取值范围,及标题
ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',
ylabel='Y-Axis', xlabel='X-Axis')
# 打印图表,相当于Python中的print函数
plt.show()
一次性生成 Multiple Axes:
# 导入 Matplotlib 模块
import matplotlib.pyplot as plt
# 定义画板2*2
fig, axes = plt.subplots(nrows=2, ncols=2)
# 一次性生成全部图表
axes[0,0].set(title='Upper Left')
axes[0,1].set(title='Upper Right')
axes[1,0].set(title='Lower Left')
axes[1,1].set(title='Lower Right')
# 打印图表,相当于Python中的print函数
plt.show()
Axes Vs.pyplot 作画方式:
# 导入 Matplotlib 模块
import matplotlib.pyplot as plt
# 定义简单的图表
plt.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3)
plt.xlim(0.5, 4.5)
# 打印图表,相当于Python中的print函数
plt.show()
线的绘制有两种方法:
1)利用 plot() 函数画出一系列的点,并且用线将它们连接起来;
2)利用关键字参数的方式绘图。
使用用 plot() 函数画点,并连线:
import matplotlib.pyplot as plt
import numpy as np
# 展开画板
fig = plt.figure()
# 添加三个Axes
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(224)
# 添加 x、y 数据
x = np.linspace(0, np.pi)
y_sin = np.sin(x)
y_cos = np.cos(x)
'''在上面的三个Axes上作画。
plot()函数,前面两个参数为x轴、y轴数据,
第三个参数是 MATLAB 风格的绘图,对应 ax3 上的颜色,marker(点),线型。'''
ax1.plot(x, y_sin)
ax2.plot(x, y_sin, 'go--', linewidth=2, markersize=5)
ax3.plot(x, y_cos, color='blue', marker='*', linestyle='dashed')
# 打印图表,相当于Python中的print函数
plt.show()
使用关键字参数的方式绘图:
import matplotlib.pyplot as plt
import numpy as np
# 定义数据
x = np.linspace(0, 10, 200)
data_obj = {'x': x,
'y1': 2 * x + 1,
'y2': 3 * x + 1.2,
'mean': 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1}
fig, ax = plt.subplots()
# 填充两条线之间的颜色
ax.fill_between('x', 'y1', 'y2', color='blue', data=data_obj)
# 画出中间的曲线
ax.plot('x', 'mean', color='red', data=data_obj)
# 打印图表,相当于Python中的print函数
plt.show()
''' 发现上面的作图,在数据部分只传入了字符串,这些字符串对一个这
data_obj 中的关键字,当以这种方式作画时,将会在传入给 data 中寻找
对应关键字的数据来绘图。 '''
import numpy as ny
import matplotlib.pyplot as p
x = [10, 20, 30, 40, 50]
index = ny.arange(5)
# index表示x轴类别,x表示y轴数量
p.bar(index, x)
p.show()
import numpy as ny
import matplotlib.pyplot as p
p.hist(ny.random.randn(100), bins=40, facecolor="blue",
edgecolor="black", alpha=0.7)
p.title("title")
p.show()
import numpy as ny
import matplotlib.pyplot as p
# a.arrange(6)为x轴,后为y轴
p.plot(ny.arange(6), [10, 20, 25, 48, 69, 80])
p.title("title")
p.show()
import numpy as ny
import matplotlib.pyplot as p
p.plot(ny.arange(6), [10, 20, 25, 48, 69, 80],
color="red", linewidth=2.0, linestyle="--")
# a.arrange(6)为x轴,后为y轴
p.plot(ny.arange(6), [11, 16, 23, 60, 69, 90],
color="blue", linewidth=2.0, linestyle="-")
p.title("title")
p.show()