首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同阵列长度的三维条形图中用大型稀疏numpy.ndarray绘制数据

在不同阵列长度的三维条形图中用大型稀疏numpy.ndarray绘制数据
EN

Stack Overflow用户
提问于 2017-04-20 03:37:32
回答 1查看 515关注 0票数 0

我的问题类似于这个问题,我想把我的光谱数据绘制成三维绘图,但是

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

2)硬件代码标注尺寸大,为1201*5001 (result.shape = (1201,5001)),不适合人工标注。

3)数据不连续、稀疏。最后的情节可能类似于mplot3d bar3d。

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

这是我正在进行的代码(第三次更新)

代码语言:javascript
复制
if __name__ == '__main__':
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib
%matplotlib inline

# from array, x is time, y is mz, z is intensity
# in graph x is mz, y is time, z is intensity

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

zs = np.arange(0, 50.01, 0.01)

    for z in zs:
        xs = np.arange(300, 1500.01, 1)
        ys = result

        ax.bar(xs,ys,zs=z,zdir='y')

plt.show()

误差(3)

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2017-04-20 07:55:32

虽然我怀疑1200*5000的条形图是否能提供对数据的视觉洞察力,但仍然可以使用它。

下面是一个例子

代码语言:javascript
复制
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()

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

https://stackoverflow.com/questions/43509777

复制
相关文章

相似问题

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