【问题标题】:Matplotlib 3d surface plot showing values outside of axis limitsMatplotlib 3d 曲面图显示轴限制之外的值
【发布时间】:2021-05-12 19:58:50
【问题描述】:

在 matplotlib 3d 绘图plot_surface 中,即使 x、y 和 z 轴限制设置为 >=0,表面的负 z 部分仍会被绘制。 2d 绘图不会发生同样的情况 - 如果在作为绘图输入提供的 20 个数据点中,有 10 个超出轴限制,例如第一象限,它们根本不会显示在绘图中。

请参阅下面的代码和相应的绘图作为证据(代码在 Jupyter 笔记本中运行)-

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

x = np.linspace(0,1.5,100)
y = np.linspace(0,1.5,100)
X,Y = np.meshgrid(x,y)
Z = 1-X-Y
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
surf = ax.plot_surface(X,Y,Z,cmap=cm.coolwarm)
ax.set_xlim(0,1.5)
ax.set_ylim(0,1.5)
ax.set_zlim(0,3)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
fig.colorbar(surf, shrink=0.5, aspect=5)
fig.savefig('Question10Fig')

蓝色和旁边的颜色条的存在表明 z

【问题讨论】:

    标签: python matplotlib plot mplot3d


    【解决方案1】:

    这似乎起源于

    ax.set_zlim(0,3)
    

    去掉这条线,我觉得这个图很好看。这似乎是 matplotlib 中的一个问题(另请参阅 this post)。

    【讨论】:

    • 感谢分享参考帖子。它给了我使用遮罩的想法,从而找出 mplot3d/matplotlib 可能存在的问题。问题是散点图尊重掩蔽,而曲面图则不。我在详细解释here。至于删除线 ax.set_zlim(0,3) 的点,它不能解决不绘制第一象限之外的部分的目的。它只是阻止异常出现。
    • @AnirbanChakraborty:当然,删除ax.set_zlim并不能解决你的问题,但它似乎是问题的根源。
    【解决方案2】:

    添加以下代码:

    z[z < 0] = np.nan
    

    仅使用set_zlim 是不够的。

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多