我正在运行以下教程中给出的quiver3d示例 http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html
我正在运行python' Python 2.7.6'在mac Yosemite上使用matplotlib 1.4.2
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> matplotlib.__version__
'1.4.2'
我正在运行matplotlib教程中给出的示例
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
x, y, z = np.meshgrid(np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.8))
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z)
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z)
w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * np.sin(np.pi * z))
ax.quiver(x, y, z, u, v, w, length=0.1)
plt.show()
但收到以下错误
Traceback (most recent call last):
File "try.py", line 16, in <module>
ax.quiver(x, y, z, u, v, w, length=0.1)
File "/Library/Python/2.7/site-packages/matplotlib/axes/_axes.py", line 4179, in quiver
q = mquiver.Quiver(self, *args, **kw)
File "/Library/Python/2.7/site-packages/matplotlib/quiver.py", line 417, in __init__
X, Y, U, V, C = _parse_args(*args)
File "/Library/Python/2.7/site-packages/matplotlib/quiver.py", line 379, in _parse_args
nr, nc = U.shape
ValueError: too many values to unpack
BTW ax是一个Axes3D我使用isinstance(ax, axes3d.Axes3d)
验证它并返回True。另外,我验证了Axes3d定义是否包含quiver方法,显然它并没有,而是使用Axes quiver方法。现在我不知道它是否必须有箭袋定义
答案 0 :(得分:0)
ax
需要是一个axes3d
对象 - 目前它只是一个普通的axes
对象,所以对ax.quiver
的调用正在调用2D例程,有不同的功能签名。如果你查看源代码中的那些行,你会看到/Library/Python/2.7/site-packages/matplotlib/quiver.py
的第417行试图将你的所有参数x,y,z,u,v,w
- 6个args解压缩为5个变量。
我不确定原因,目前无法检查,但出于某种原因,fig.gca(projection="3d")
不给你一个axes3d
对象,所以2D版本的箭袋正在被caleld而不是3D版本。
如果堆栈上没有轴对象,则进行更多挖掘,fig.gca(...)
只调用fig.add_subplot(1,1,1,**kwargs)
。这是一个完整的程序吗?或者你是否在同一个程序中做了一些其他的事情之后呢?
您可以尝试将gca
调用替换为add_subplot(1,1,1,projection='3d')
- 这不会查询堆栈,因此如果您已经有其他内容,则无关紧要。
答案 1 :(得分:0)
我在Linux,python 2.7和早于1.3的matplotlib上遇到了完全相同的问题。 从源代码安装了最新的稳定matplotlib后,它仍然无法正常工作。 只有在清除旧的matplotlib文件后才能使用。