我必须绘制一个具有无意义负值的3d函数(它们不应出现在图中)。它必须是情节的功能是这样的:Matplotlib忽略三维图中的负值
def constraint_function(x, y):
return min(
(1800 - 0.3 * x - 0.5 * y)/0.4,
(500 - 0.1 * x - 0.08 * y)/0.12,
(200 - 0.06 * x - 0.04 * y)/0.05
)
我计算功能的方式如下:
xs = np.linspace(0, 3600, 1000)
ys = np.linspace(0, 3600, 1000)
zs = np.empty(shape=(1000, 1000))
for ix, x in enumerate(xs):
for iy, y in enumerate(ys):
zs[ix][iy] = constraint_function(x, y)
xs, ys = np.meshgrid(xs, ys)
功能大多在广场[0, 3600]x[0, 3600]
有效值。第一种方法我已经被设定轴界限适合我的需要:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.azim = 20
ax.set_xlim(0, 3500)
ax.set_ylim(0, 3500)
ax.set_zlim(0, 4500)
ax.plot_surface(xs, ys, zs)
plt.show()
导致以下情节:
它只是忽略的限制,做反正绘制。第二种方法是定义负值为np.nan
改变功能是为:
def constraint_function(x, y):
temp = min(
(1800 - 0.3 * x - 0.5 * y)/0.4,
(500 - 0.1 * x - 0.08 * y)/0.12,
(200 - 0.06 * x - 0.04 * y)/0.05
)
return temp if temp >= 0 else np.nan
和设置无效值的阿尔法为零:
plt.cm.jet.set_bad(alpha=0.0)
ax.azim = 20
ax.set_xlim(0, 3500)
ax.set_ylim(0, 3500)
ax.set_zlim(0, 4500)
ax.plot_surface(xs, ys, zs)
plt.show()
它给我留下了锯状这也是我不想拥有的边界。当情节转为负面时,是否有办法摆脱这些边缘并获得平滑线条?