Python 在具有不同阵列长度的三维条形图中打印来自大型稀疏numpy.ndarray的数据

Python 在具有不同阵列长度的三维条形图中打印来自大型稀疏numpy.ndarray的数据,python,matplotlib,plot,Python,Matplotlib,Plot,我的问题与此类似,我想把光谱数据绘制成3D图,但 1) 我的数据是np.ndarray中的矩阵 2) 它的大尺寸为1201*5001(result.shape=(12015001)),因此不适合手动硬代码标签 3) 数据不是连续的和稀疏的。最终的绘图可能看起来像bar3d 在这种情况下,我可以使用Matplotlib中的三维条形图吗?如果可能,如何为每个轴定义不同的长度 这是我正在编写的代码(第三次更新) 错误(第三) 回溯(最近一次呼叫最后一次): 文件“prelimnmf_importsc

我的问题与此类似,我想把光谱数据绘制成3D图,但

1) 我的数据是np.ndarray中的矩阵

2) 它的大尺寸为1201*5001(
result.shape=(12015001)
),因此不适合手动硬代码标签

3) 数据不是连续的和稀疏的。最终的绘图可能看起来像bar3d

在这种情况下,我可以使用Matplotlib中的三维条形图吗?如果可能,如何为每个轴定义不同的长度


这是我正在编写的代码(第三次更新)

错误(第三)

回溯(最近一次呼叫最后一次):
文件“prelimnmf_importscv3.py”,第70行,在
ax.bar(xs,ys,zs=z,zdir='y')
文件“/Users/pp/anaconda/lib/python2.7/site packages/mpl_toolkits/mplot3d/axes3d.py”,第2394行,在条形图中
面片=轴.bar(自身、左侧、高度、*args、**kwargs)
文件“/Users/pp/anaconda/lib/python2.7/site packages/matplotlib/__init__.py”,内页第1892行
返回函数(ax,*args,**kwargs)
文件“/Users/pp/anaconda/lib/python2.7/site packages/matplotlib/axes/_axes.py”,第2115行,在条形图中
如果h<0:
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

虽然我怀疑1200*5000的条形图是否能提供对数据的任何直观洞察,但仍然可以使用它

下面是一个例子

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

#Assume you have arrays like this
x = np.arange(300,1500,100)
y = np.arange(4)*10
Z = np.random.rand(len(y), len(x))*33

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

for i in range(len(y))[::-1]:
    c = plt.cm.jet(i/float(len(y)))
    ax.bar(x, Z[i,:], zs=y[i], zdir='y',  width=80,alpha=1 )

ax.set_xlabel('time')
ax.set_ylabel('mz')
ax.set_zlabel('intensity')

plt.show()

到目前为止,您尝试了什么代码?@James我添加了我的代码,对不起。它有许多错误。我现在试着修复它。所以,你有一个三维数组(X,Y,Z),其中Z是值,你想做一个柱状条形图(例如沿着X),或者你到底想做什么?另外,如果你说的是稀疏:这是否意味着大量的点是可以忽略的?那就从那里进去怎么样?MPL应该能够忽略它们。两者的区别在哪里?还有一些重要信息丢失了,即数据(
结果
)是如何组织的。这里也一样。请阅读并理解。@alexblae是的,Z是高度。谢谢你提到稀疏。现在绘图正在运行,但速度太慢了。如果我用NaN替换0(是的,在绘图中可以忽略),绘图是否更快?
Traceback (most recent call last):
  File "prelimnmf_importcsv3.py", line 70, in <module>
    ax.bar(xs,ys,zs=z,zdir='y')
  File "/Users/pp/anaconda/lib/python2.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 2394, in bar
    patches = Axes.bar(self, left, height, *args, **kwargs)
  File "/Users/pp/anaconda/lib/python2.7/site-packages/matplotlib/__init__.py", line 1892, in inner
    return func(ax, *args, **kwargs)
  File "/Users/pp/anaconda/lib/python2.7/site-packages/matplotlib/axes/_axes.py", line 2115, in bar
    if h < 0:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

#Assume you have arrays like this
x = np.arange(300,1500,100)
y = np.arange(4)*10
Z = np.random.rand(len(y), len(x))*33

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

for i in range(len(y))[::-1]:
    c = plt.cm.jet(i/float(len(y)))
    ax.bar(x, Z[i,:], zs=y[i], zdir='y',  width=80,alpha=1 )

ax.set_xlabel('time')
ax.set_ylabel('mz')
ax.set_zlabel('intensity')

plt.show()