我可以使用Mayavi在我的机器上建立3D条形图吗?

问题描述 投票:0回答:1

[想使用Jupyter笔记本(在Python virtualenv上)使用Mayavi(在我的Asus笔记本电脑Intel CoreTM i7-4510U CPU @ 2.00 GHz,RAM 8 GB de Windows,Windows 10上)构建3D条形图,但是灰屏。

Once the data was imported,我单击“新建”>“ Python 3,然后写]

Mayavi build 3D bar chart

[使用的熊猫的快速CSV解析器pandas.read_csv()和运行第4行后,我可以看到使用CleanMem Mini Monitor的内存使用量增加到可使用内存的88%,并在不到1分钟的时间内得到了结果。

然后,构建bar chart

df1=df[[0]]
df2=df[[1]]
df3=df[[2]]
mlab.barchart(df1,df2,df3)

不幸的是,我遇到了这个MemoryError

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-6-9736b00b5abc> in <module>
      2 df2=df[[1]]
      3 df3=df[[2]]
----> 4 mlab.barchart(df1,df2,df3)

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\helper_functions.py in the_function(*args, **kwargs)
     35 
     36     def the_function(*args, **kwargs):
---> 37         return pipeline(*args, **kwargs)
     38 
     39     if hasattr(pipeline, 'doc'):

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\helper_functions.py in __call__(self, *args, **kwargs)
     80             scene.disable_render = True
     81         # Then call the real logic
---> 82         output = self.__call_internal__(*args, **kwargs)
     83         # And re-enable the rendering, if needed.
     84         if scene is not None:

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\helper_functions.py in __call_internal__(self, *args, **kwargs)
   1093         """ Override the call to be able to scale automatically the axis.
   1094         """
-> 1095         g = Pipeline.__call_internal__(self, *args, **kwargs)
   1096         gs = g.glyph.glyph_source
   1097         # Use a cube source for glyphs.

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\helper_functions.py in __call_internal__(self, *args, **kwargs)
     90         the last object created by the pipeline."""
     91         self.store_kwargs(kwargs)
---> 92         self.source = self._source_function(*args, **kwargs)
     93         # Copy the pipeline so as not to modify it for the next call
     94         self.pipeline = self._pipeline[:]

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\sources.py in vertical_vectors_source(*args, **kwargs)
   1356 
   1357     data_source = MVerticalGlyphSource()
-> 1358     data_source.reset(x=x, y=y, z=z, scalars=s)
   1359 
   1360     name = kwargs.pop('name', 'VerticalVectorsSource')

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\sources.py in reset(self, **traits)
    306                 traits['u'] = traits['v'] = np.ones_like(s),
    307                 traits['w'] = s
--> 308         super(MVerticalGlyphSource, self).reset(**traits)
    309 
    310     def _scalars_changed(self, s):

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\sources.py in reset(self, **traits)
    172 
    173         else:
--> 174             points = np.c_[x.ravel(), y.ravel(), z.ravel()].ravel()
    175             points.shape = (-1, 3)
    176             self.trait_set(points=points, trait_change_notify=False)

c:\infovis\virtualenvs\dev\lib\site-packages\numpy\lib\index_tricks.py in __getitem__(self, key)
    404                 objs[k] = objs[k].astype(final_dtype)
    405 
--> 406         res = self.concatenate(tuple(objs), axis=axis)
    407 
    408         if matrix:

<__array_function__ internals> in concatenate(*args, **kwargs)

MemoryError: Unable to allocate array with shape (153543233, 3) and data type int64

结果是这个

Result

python jupyter-notebook out-of-memory data-visualization mayavi
1个回答
0
投票

由于不断出现内存不足,我不得不想出一种减少数据量的方法。

Trifacta的启发,我决定使用sampling(从CSV文件创建一个样本)。以下是一些我可能会产生的示例]

Sampling

出于简化原因,决定选择随机样本。 Using Git Bash on Windows 10我只是运行了类似的命令(行数可能与使用的行数不同)为

shuf -n 10000 BIGFILE.csv > SAMPLEFILE.csv

然后,创建可视化文件的过程与文件名完全相同,结果如下:>

Mayavi 3D Bar Chart

Mayavi 3D Bar Chart

Mayavi 3D Bar Chart

© www.soinside.com 2019 - 2024. All rights reserved.