Matplotlib contour
在数据可视化领域,matplotlib是一个非常强大且灵活的库,它提供了各种绘图函数,其中之一就是contour。Contour图是一种二维图形,可以显示出等高线的分布情况。在本文中,我将详细介绍matplotlib中contour的使用方法,并提供各种示例代码来帮助您更好地理解。
1. 基本的Contour图
首先,让我们来看一个最基本的Contour图示例。在这个示例中,我们将创建一个简单的二维数组,并利用matplotlib的contour函数来绘制出相应的等高线图。
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 绘制Contour图
plt.contour(X, Y, Z)
plt.show()
Output:
运行上述代码,您将看到一个显示正弦和余弦函数叠加的等高线图。
2. 设置等高线数量和颜色
除了绘制基本的等高线图外,我们还可以对其进行定制化,比如设置等高线的数量、颜色等。接下来的示例代码演示了如何设置等高线数量并使用不同的颜色填充等高线图。
# 设置等高线数量并指定填充
plt.contour(X, Y, Z, levels=10, cmap='rainbow')
plt.colorbar() # 添加颜色条
plt.show()
在上述代码中,我们使用levels
参数来设置等高线数量为10,并使用cmap
来指定填充的颜色为彩虹色。运行代码后,您将看到等高线数量增加为10个并采用彩虹色填充。
3. 自定义等高线的线型和宽度
通过使用linestyles
参数和linewidths
参数,您可以自定义等高线的线型和宽度。下面的示例代码展示了如何实现自定义等高线的线型和宽度。
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 自定义等高线的线型和宽度
plt.contour(X, Y, Z, linestyles='dashed', linewidths=2)
plt.show()
Output:
在上述示例中,我们将等高线的线型设置为虚线(dashed
),宽度为2。运行代码后,您将看到等高线图中的线型和宽度都得到了定制。
4. 添加等高线标签
在等高线图中添加标签可以帮助读者更好地理解图像所代表的含义。下面的示例代码展示了如何在等高线图中添加标签。
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 添加等高线标签
contour = plt.contour(X, Y, Z)
plt.clabel(contour, inline=True, fontsize=8)
plt.show()
Output:
在上述示例中,我们首先创建一个等高线对象contour
,然后使用clabel
函数来添加等高线标签。运行代码后,您将看到等高线图中各等高线的数值标签。
5. 绘制3D等高线图
除了二维的等高线图外,matplotlib也支持绘制3D等高线图。下面的示例代码展示了如何绘制3D等高线图。
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 绘制3D等高线图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.contour(X, Y, Z, zdir='z', offset=0)
plt.show()
在上述示例中,我们使用mpl_toolkits.mplot3d
模块中的Axes3D
来创建一个3D图形,并通过zdir
和offset
参数指定绘制的方向和高度。运行代码后,您将看到一个3D的等高线图。
6. 绘制带有填充色的等高线图
除了普通的等高线图外,我们还可以使用contourf
函数来绘制带有填充色的等高线图。下面的示例代码展示了如何绘制带有填充色的等高线图。
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 绘制带有填充色的等高线图
plt.contourf(X, Y, Z, levels=20, cmap='viridis')
plt.colorbar()
plt.show()
Output:
在上述示例中,我们使用contourf
函数来绘制带有填充色的等高线图,并设置levels
参数为20,填充颜色为viridis
。运行代码后,您将看到一个带有填充颜色的等高线图。
7. 绘制等高线子图
有时候,在一个图中同时展示多个等高线图也是非常有用的。下面的示例代码展示了如何绘制等高线子图。
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 绘制等高线子图
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.contour(X, Y, Z, levels=10, cmap='cool')
plt.subplot(1, 2, 2)
plt.contourf(X, Y, Z, levels=20, cmap='hot')
plt.show()
Output:
在上述示例中,我们使用subplot
函数来创建一个包含两个子图的图像,并在每个子图中绘制不同的等高线图。运行代码后,您将看到一个包含两个等高线子图的图像。
8. 自定义等高线间隔
在绘制等高线图时,您还可以自定义等高线的间隔。下面的示例代码展示了如何设置不同的等高线间隔。
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 自定义等高线间隔
levels = np.arange(-1, 1.5, 0.25) # 设置等高线间隔
plt.contour(X, Y, Z, levels=levels, cmap='terrain')
plt.show()
Output:
在上述示例中,我们使用levels
参数自定义了等高线的间隔,从-1到1.5,间隔为0.25。运行代码后,您将看到等高线图的等高线间隔被设置为不同的数值。
9. 绘制嵌套的等高线
在等高线图中,有时候会遇到嵌套的等高线情况。下面的示例代码展示了如何绘制嵌套的等高线。
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 绘制嵌套的等高线
Z1 = np.sin(3*X) + np.cos(3*Y)
Z2 = np.sin(X) + np.cos(Y)
plt.contour(X, Y, Z1, colors='r', levels=5)
plt.contour(X, Y, Z2, colors='b', levels=5)
plt.show()
Output:
在上述示例中,我们创建了两个不同的二维数组Z1
和Z2
,并分别绘制了红色和蓝色的嵌套等高线图。运行代码后,您将看到两个不同颜色的嵌套等高线图。
10. 绘制范围限定的等高线图
有时候,您可能只想展示某个范围内的等高线图,这时可以使用plt.xlim()
和plt.ylim()
函数进行范围限定。下面的示例代码展示了如何绘制范围限定的等高线图。
import numpy as np
import matplotlib.pyplot as plt
# 创建二维数组
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 绘制范围限定的等高线图
plt.contour(X, Y, Z, levels=10, cmap='seismic')
plt.xlim(-1, 1) # 设置x轴范围
plt.ylim(-1, 1) # 设置y轴范围
plt.show()
Output:
在上述示例中,我们使用plt.xlim()
和plt.ylim()
函数将x轴和y轴的范围限定在-1到1之间。运行代码后,您将看到等高线图仅展示了指定范围内的数据。