gpt4 book ai didi

python - 将预缓存数据绘制到许多子图中时,Matplotlib 速度很慢

转载 作者:行者123 更新时间:2023-12-01 04:51:17 25 4
gpt4 key购买 nike

虽然周围有很多 matplotlib 优化的帖子,但我在这里没有找到我想要的确切提示,例如: Matplotlib slow with large data sets, how to enable decimation?

Matplotlib - Fast way to create many subplots?

我的问题是我缓存了时间序列数据的 CSV 文件(其中 40 个)。我想将它们绘制在一个图中,并在垂直系列中包含 40 个子图,并将它们输出到单个光栅化图像。

我使用matplotlib的代码如下:

def _Draw(self):
"""Output a graph of subplots."""
BigFont = 10
# Prepare subplots.
nFiles = len(self.inFiles)
fig = plt.figure()
plt.axis('off')
for i, f in enumerate(self.inFiles[0:3]):
pltTitle = '{}:{}'.format(i, f)
colorFile = self._GenerateOutpath(f, '_rgb.csv')
data = np.loadtxt(colorFile, delimiter=Separator)
nRows = data.shape[0]
ind = np.arange(nRows)
vals = np.ones((nRows, 1))
ax = fig.add_subplot(nFiles, 1, i+1)
ax.set_title(pltTitle, fontsize=BigFont, loc='left')
ax.axis('off')
ax.bar(ind, vals, width=1.0, edgecolor='none', color=data)
figout = plt.gcf()
plt.savefig(self.args.outFile, dpi=300, bbox_inches='tight')

脚本挂了一整夜。平均而言,我的数据都是 ~10,000 x 3 到 ~30,000 x 3 矩阵。

就我而言,我认为我不能使用 memmapfile 来避免内存占用,因为子图似乎是这里的问题,而不是每个循环导入的数据。

我不知道从哪里开始优化这个工作流程。然而,我可以忘记子图,一次为每个数据生成一个绘图图像,然后缝合 40 个图像,但这并不理想。

matplotlib 中有一个简单的方法可以做到这一点吗?

最佳答案

您的问题在于绘制数据的方式。

与使用 imshow 完成相同的事情相比,使用 bar 绘制数万个大小完全相同的条形非常效率低下.

例如:

import numpy as np
import matplotlib.pyplot as plt

# Random r,g,b data similar to what you seem to be loading in....
data = np.random.random((30000, 3))

# Make data a 1 x size x 3 array
data = data[None, ...]

# Plotting using `imshow` instead of `bar` will be _much_ faster.
fig, ax = plt.subplots()
ax.imshow(data, interpolation='nearest', aspect='auto')
plt.show()

enter image description here

这应该基本上等同于您当前正在做的事情,但绘制速度会更快并且使用更少的内存。

关于python - 将预缓存数据绘制到许多子图中时,Matplotlib 速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28413902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com