You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

3D绘图中contourf的set_xlim与set_ylim设置不生效问题求解

Matplotlib 3D等高线限制在坐标轴范围内的解决方案

问题原因

matplotlib 3D坐标系的xlim、ylim仅会调整坐标轴的显示范围,默认不会对绘制的元素(比如投影等高线)做裁剪,因此输入数据范围大于轴范围时,等高线会延伸到坐标轴外侧。

解决方案

最稳妥的实现方式是在绘制等高线前,先将X、Y、Z数据按你设定的坐标轴范围做截断,用截断后的数据绘制等高线即可。
修改后可直接运行的完整代码如下:

import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import axes3d
import numpy as np

ax = plt.figure().add_subplot(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)

# 定义坐标轴范围
x_min, x_max = -20, 20
y_min, y_max = -20, 20

# 截断符合范围的坐标数据
x_mask = (X[0, :] >= x_min) & (X[0, :] <= x_max)
y_mask = (Y[:, 0] >= y_min) & (Y[:, 0] <= y_max)
X_cut = X[y_mask, :][:, x_mask]
Y_cut = Y[y_mask, :][:, x_mask]
Z_cut = Z[y_mask, :][:, x_mask]

# 用截断后的数据绘制等高线
cset = ax.contourf(X_cut, Y_cut, Z_cut, zdir='z', offset=-100, cmap=cm.coolwarm)

ax.set_xlim(x_min, x_max)
ax.set_ylim(y_min, y_max)
ax.set_zlim(-100, 100)

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

plt.show()

如果不想修改原始数据,也可以为等高线对象手动设置裁剪路径,不过实现复杂度更高,截断数据的方式兼容性更好,适合绝大多数场景。

内容的提问来源于stack exchange,提问作者Winston Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:36:03