【问题标题】:python - Matplotlib 3D input formatting Z (dependent) valuespython - Matplotlib 3D 输入格式化 Z(相关)值
【发布时间】:2016-07-14 14:56:26
【问题描述】:

我有一个与Matplotlib 3D plot - 2D format for input data? 非常相似的问题,但它只是部分解决了我的问题(最初是 .plot_surface() 无法识别任何参数)。我想要做的是绘制 2 个参数的函数,这就是我所拥有的:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X,Y = np.meshgrid(positions[0],np.transpose(positions[1]))
Z = data[0]
Axes3D.plot_surface(X, Y, Z)

引发此错误:

TypeError: plot_surface() missing 1 required positional argument: 'Z'

data[0] 是一个二维数组。 (数据是二维数组的列表)。位置是行向量和列向量的元组,因此第 3 行本质上是将位置重建为两个行向量,然后根据 Axes3D.plot_surface() 的要求制作两个矩阵,一个用于 X,一个用于 Y 值。

我的问题是,即使 Z 是二维数组,.plot_surface() 也拒绝识别它。

编辑:我刚刚确认 Z 确实是使用这个的正确形状:

if Z.shape == X.shape:
    print('Same shape')
    Axes3D.plot_surface(X, Y, Z)

所以我不知道为什么它不起作用。 即使我像这样使用 X 代替 Z(因为它没有抱怨 X 丢失或形状错误),它仍然会生气。

Axes3D.plot_surface(X, Y, X)

编辑:通过查看示例和尝试,我终于让它工作了。不过,我几乎不认为这已解决,因为我仍然不知道为什么一种方法有效而另一种方法无效,而且我不想将这个未解决的问题留给后代。我这样做是为了让它工作

surf = ax.plot_surface(X, Y, Z)

而不是“Axes3D.plotsurface()”。我不知道为什么这个改变让它起作用,所以仍然请帮我解决这个问题。

【问题讨论】:

  • 这有点正确:stackoverflow.com/questions/9170838/…>
  • 但问题是我已经有了之前生成的数组。我以后可能会像这样重写它,但这不是我现在需要的。我不明白为什么它不会按原样绘制。
  • 我也遇到了这个问题——文档似乎建议你可以这样使用它,但你根本不能。如果您执行Axes3D.plot_surface(X=X,Y=Y,Z=Z),您会发现它缺少self。这似乎是版本 1.0.0 的更改,让文档有点混乱。

标签: arrays python-3.x multidimensional-array matplotlib 3d


【解决方案1】:

正如你所说,似乎正确的方法是通过轴对象(下面代码中的ax):

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z)

或者,您仍然可以使用Axes3D 调用它,但是您需要将轴对象ax 传递给它,如下所示:

Axes3D.plot_surface(ax, X, Y, Z)

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 2015-10-26
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多