如何使用 Mayavi 在我的机器上构建 3D 条形图?
What could I do to build the 3D Bar Chart on my machine using Mayavi?
想要使用 Mayavi 构建 3D 条形图(在我的华硕笔记本电脑英特尔酷睿™ i7-4510U CPU @ 2.00 GHz 和 8 GB 内存,Windows 10)使用 Jupyter Notebook (在 Python virtualenv 上)但我的屏幕是灰色的。
Once the data was imported,我点了New > Python 3然后写了
使用了 pandas' 快速 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
结果是这样的
由于经常内存不足,我不得不想出一种减少数据量的方法。
受到 Trifacta 的启发,我决定使用 采样 (从 CSV 文件创建样本)。以下是我可以生产的一些可能的样品
出于简化原因,决定使用 运行dom 样本。 Using Git Bash on Windows 10 我只是 运行 一个类似的命令(行数可能与使用的行数不同)如
shuf -n 10000 BIGFILE.csv > SAMPLEFILE.csv
然后创建可视化的过程完全相同,除了文件名,结果如下
想要使用 Mayavi 构建 3D 条形图(在我的华硕笔记本电脑英特尔酷睿™ i7-4510U CPU @ 2.00 GHz 和 8 GB 内存,Windows 10)使用 Jupyter Notebook (在 Python virtualenv 上)但我的屏幕是灰色的。
Once the data was imported,我点了New > Python 3然后写了
使用了 pandas' 快速 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
结果是这样的
由于经常内存不足,我不得不想出一种减少数据量的方法。
受到 Trifacta 的启发,我决定使用 采样 (从 CSV 文件创建样本)。以下是我可以生产的一些可能的样品
出于简化原因,决定使用 运行dom 样本。 Using Git Bash on Windows 10 我只是 运行 一个类似的命令(行数可能与使用的行数不同)如
shuf -n 10000 BIGFILE.csv > SAMPLEFILE.csv
然后创建可视化的过程完全相同,除了文件名,结果如下