import matplotlib.pyplot as pltimport numpy as npplt.style.use('_mpl-gallery-nogrid')# make data:np.random.seed(1)x = np.random.uniform(-3, 3, 256)y = np.random.uniform(-3, 3, 256)z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)levels = np.linspace(z.min(), z.max(), 7)# plot:fig, ax = plt.subplots()ax.plot(x, y, 'o', markersize=2, color='lightgrey')ax.tricontour(x, y, z, levels=levels)ax.set(xlim=(-3, 3), ylim=(-3, 3))plt.show()
# 1. 导入库import matplotlib.pyplot as pltimport numpy as np# 2. 设置内置绘图样式plt.style.use('_mpl-gallery-nogrid')# 3. 生成随机数据np.random.seed(1) # 固定随机数种子,确保每次运行结果一致,便于复现。x = np.random.uniform(-3, 3, 256)y = np.random.uniform(-3, 3, 256)# 在区间 [-3, 3] 内生成 256 个均匀分布的随机数作为点的 x 坐标和 y 坐标。# 4. 计算函数值z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2) # 对每个点 (x[i], y[i]) 计算对应的 z 值,作为该点的高度或颜色映射的依据。# 5. 定义轮廓等级levels = np.linspace(z.min(), z.max(), 7) # 在 z 的最小值和最大值之间均匀生成 7 个数值,这些数值将作为三角轮廓图中等高线的层级。# 6. 创建图形和坐标轴fig, ax = plt.subplots() # 创建一个图形对象 fig 和一个坐标轴对象 ax# 7. 绘制散点图ax.plot(x, y, 'o', markersize=2, color='lightgrey')#用浅灰色的圆点('o')绘制所有数据点,点大小为 2。这些散点展示了原始采样点的分布,为后续轮廓图提供背景参考。# 8. 绘制三角轮廓图ax.tricontour(x, y, z, levels=levels)# ax.tricontour:用于在非结构化网格(即随机分布的点)上绘制等高线。它基于点的 Delaunay 三角剖分,在三角形内部插值,然后绘制等值线。# levels=levels:指定轮廓线的层级,即绘制 7 条等高线,分别对应不同的 z 值。# 9. 设置坐标轴范围ax.set(xlim=(-3, 3), ylim=(-3, 3)) # 将 x 轴和 y 轴的显示范围固定在 [-3, 3],与数据生成范围一致,确保完整展示所有点。# 10. 显示图形plt.show()
- 在不规则采样数据上快速绘制轮廓图,常用于科学计算和数据分析中的二维场可视化。
- 前景是函数 z 的等高线,颜色和线条样式由 Matplotlib 自动分配,反映函数值在平面上的变化趋势。
- 由于使用了三角剖分,即使数据点不规则,也能生成平滑的轮廓线。
- 与 contour 不同(需要规则网格数据),tricontour 可以直接处理随机分布的点,非常适合这种情形。