首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >axes3d.plot_wireframe(X,Y,Z)错误

axes3d.plot_wireframe(X,Y,Z)错误
EN

Stack Overflow用户
提问于 2017-11-10 23:11:11
回答 4查看 11.7K关注 0票数 3

我正试图通过youtube上的一个教程学习Python,但我在处理3D图形时遇到了一些困难。长话短说,我不断得到(如果

代码语言:javascript
复制
Z.ndim != 2:
AttributeError: 'list' object has no attribute 'ndim')

尝试启动此简单程序时出错:

代码语言:javascript
复制
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fig = plt.figure()

chart = fig.add_subplot(1,1,1,projection = '3d')

X,Y,Z = [1,2,3,4,5,6,7,8],[2,5,3,8,9,5,6,1],[3,6,2,7,5,4,5,6]

chart.plot_wireframe(X,Y,Z)

plt.show()

我知道这与Axes3.plot_wireframe()方法有关,但是谁能给我解释一下发生了什么?

EN

回答 4

Stack Overflow用户

发布于 2018-07-28 00:44:14

我通过做两件事绕过了这个问题。

  1. 将numpy导入为np
  2. 使z轴成为多维数组

代码语言:javascript
复制
#My 3d graph

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

figure = plt.figure()
axis = figure.add_subplot(111, projection = '3d')

x = [1,2,3,4,5,6,7,8,9,10]
y = [5,6,7,8,2,5,6,3,7,2]
z = np.array([[1,2,6,3,2,7,3,3,7,2],[1,2,6,3,2,7,3,3,7,2]])

axis.plot_wireframe(x, y, z)

axis.set_xlabel('x-axis')
axis.set_ylabel('y-axis')
axis.set_zlabel('z-axis')

plt.show()

特别注意z变量。如果z不是多维的,它将抛出一个错误。

希望它能解决你的问题

票数 3
EN

Stack Overflow用户

发布于 2017-11-10 23:18:04

在matplotlib版本为2.0.2的Python 2.7.10或Python 3.6.0中运行您的代码,将生成相同的图像,并且没有错误:

这不是一个线框图,一个简单的ax.plot(X, Y, Z)就能生成它。正如DavidGImportanceOfBeingErnest巧妙地提到的那样,将1D列表传递给线框函数是没有意义的,因为X、Y和Z应该是二维的。

下面的代码(取自matplotlib官方文档的一个例子)显示了plot_wireframe函数的参数应该是怎样的(使用numpy数组):

代码语言:javascript
复制
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np

'''
def get_test_data(delta=0.05):

    from matplotlib.mlab import  bivariate_normal
    x = y = np.arange(-3.0, 3.0, delta)
    X, Y = np.meshgrid(x, y)

    Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
    Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
    Z = Z2 - Z1

    X = X * 10
    Y = Y * 10
    Z = Z * 500
    return X, Y, Z

'''


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x, y, z = axes3d.get_test_data(0.05)

ax.plot_wireframe(x,y,z, rstride=2, cstride=2)

plt.show()

输出图像是真正的线框图:

例如,打印x.shape将生成( 120,120),表明该数组是二维的,第一维有120个位置,第二维有120个位置。

票数 2
EN

Stack Overflow用户

发布于 2017-11-14 09:48:19

我有确切的问题(从视频中的例子不能工作,尽管完全复制)。在不看源代码的情况下,我假设matplotlib2.1.0中添加了一个现实检查,它现在停止在plot_wireframe中使用一维数组。将方法调用更改为简单的"plot“确实解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47225830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档