文章目录
- 函数说明
- 参数说明
- 返回值
- 示例
- 生成双峰山体数据
- 代码案例
- 生成三维的空间双峰山形函数
plt.contour
是 Matplotlib 库中的一个函数,用于绘制等高线图。等高线图是一种特殊的地图,其中等高线表示相同高度的等值线。
函数说明
matplotlib.pyplot.contour(X, Y, Z, levels=None, colors=None, linestyles=None, linewidths=None, alpha=None, cmap=None, norm=None, extend=None, antialiased=None, origin=None, extent=None, *, data=None)
参数说明
X, Y
: 输入的两个一维数组,表示网格的坐标。Z
: 一个二维数组,表示网格上每个点的值。levels
: 一个数组或整数,指定等高线的值。如果是一个数组,则会绘制这些值对应的等高线;如果是一个整数,则会自动生成指定数量的等高线。colors
: 一个字符串或一个颜色列表,指定等高线的颜色。linestyles
: 一个字符串或一个线条样式列表,指定等高线的线条样式。linewidths
: 一个数值或一个数值列表,指定等高线的线条宽度。alpha
: 一个介于0和1之间的数值,指定等高线的透明度。cmap
: 一个 Colormap 实例,指定等高线的颜色映射。norm
: 一个 Normalize 实例,指定等高线的颜色映射的归一化。extend
: 一个字符串,指定等高线在颜色映射之外的行为。antialiased
: 一个布尔值,指定是否对线条进行抗锯齿处理。origin
: 一个字符串,指定图像的原点位置。extent
: 一个长度为4的序列,指定图像的范围:[xmin, xmax, ymin, ymax]。data
: 一个可选的字典,包含用于绘制的额外数据。
返回值
返回一个 QuadContourSet
对象,表示等高线图。
示例
import matplotlib.pyplot as plt
import numpy as np
# 创建一个二维网格
x = np.linspace(-3.0, 3.0, 100)
y = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
# 绘制等高线
plt.contour(X, Y, Z, colors='black')
# 添加标题和坐标轴标签
plt.title('Contour Plot')
plt.xlabel('X')
plt.ylabel('Y')
# 显示图形
plt.show()
首先创建了一个二维网格,然后计算了每个网格点处的函数值。接着使用 plt.contour
函数绘制了这些函数值的等高线,指定等高线的颜色为黑色,并添加了标题和坐标轴标签
plt.contour
函数默认会自动选择等高线的值,如果想要指定等高线的值,可以通过 levels
参数来实现。例如,如果要绘制特定的等高线值:
plt.contour(X, Y, Z, levels=[0], colors='black')
这将只绘制函数值为0的等高线。
生成双峰山体数据
# 定义生成山体形状的函数
def height(x,y):
return -(np.log2(np.exp(-(x-2)**2-(y-2)**2) + 1.2*np.exp(-x**2-y**2)))**1
# 生成数据点
x = np.arange(-5.5,8.5,0.2)
y = np.arange(-5.5,8.5,0.2)
X,Y = np.meshgrid(x,y)
Z = height(X,Y)
代码案例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
# 定义生成山体形状的函数
def saddle_shape(x, y):
return -np.log((np.exp(-(x-2)**2-(y-2)**2) + 1.2*np.exp(-x**2-y**2)))
# 生成数据点
x = np.arange(-1.5,3.5,0.1)
y = np.arange(-1.5,3.5,0.1)
X,Y = np.meshgrid(x,y)
Z = saddle_shape(X,Y)
# 设置字体为新罗马
plt.rcParams['font.family'] = 'Times New Roman'
# ax, fig = plt.subplots()
# 绘制填充等高线图
plt.contourf(Y, X, Z, levels=np.linspace(Z.min(), Z.max(), 20))
# 设置坐标轴标签
# plt.colorbar(label='U') # 添加颜色条
plt.ylabel('w(mm)')
plt.xlabel('$x_b$')
# 创建一个颜色条对象
cbar = plt.colorbar()
# 设置颜色条的标签
cbar.set_label('U (mJ)')
# 设置颜色条刻度对应的数值
cbar.set_ticks([1.22, 6.85, 12.48])
cbar.set_ticklabels(['0', '2', '4'])
plt.yticks([-1, 0, 1, 2, 3], [3, '', '', '', -3])
plt.xticks([-1, 0, 1, 2, 3], [-10, '', '', '', 10])
# 显示图形
plt.show()
生成三维的空间双峰山形函数
ax.contourf3D(X, Y, Z)