【问题标题】:Read datasets one by one and put them next to the previous plot一个一个地读取数据集并将它们放在上一个图旁边
【发布时间】:2021-10-03 08:54:27
【问题描述】:

我有一些太大的数据集,我想用matplotlibimshow() 函数绘制这些数据集。

我需要绘制与matplotlib 连接的数据集,但由于数据集非常大,当我尝试连接时会导致我的计算机过热(我使用NumPy 库进行连接)。我是否可以一个一个地读取这些数据集并将它们放在上一个图的旁边,就像我在下面给出的 gif 一样?由于我将所有数据集都一一读取,因此不会引起发热。

【问题讨论】:

  • Imshow 有一个“extent”关键字参数,可让您将图像放在 x 轴上所需的位置。
  • 但我找不到使用扩展的方法。
  • 你尝试了什么?建议使用尽可能少的完整可重现代码更新您的问题。
  • @mehmet_kacmaz_03 你能对my answer 提供反馈吗,我很想知道它是否解决了你的问题,以及计算机是否设法生成了情节

标签: python python-3.x numpy matplotlib plot


【解决方案1】:

让我们假设这个输入:

array = np.diag(np.ones(3))
arrays = [array,array*2,array*3]
[array([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]]),
 array([[2., 0., 0.],
        [0., 2., 0.],
        [0., 0., 2.]]),
 array([[3., 0., 0.],
        [0., 3., 0.],
        [0., 0., 3.]])]

看起来像:

plt.imshow(np.concatenate(arrays, axis=1))

现在我们要逐块绘制。为此,我们遍历块并使用imshowextent 选项

ax = plt.subplot()

vmin = min(a.min() for a in arrays)  ## if you know the values in advance you
vmax = max(a.max() for a in arrays)  ## can input them instead of calculating

for i,a in enumerate(arrays):
    h,w = a.shape
    ax.imshow(a, vmin=vmin, vmax=vmax,
              extent=[(w*i)-0.5, (w*(i+1))-0.5, h-0.5, -0.5])
ax.set_xlim(-0.5, (w*(i+1))-0.5)

您需要提前知道整个数据集的最小/最大值,并使用vmin/vmax 参数将其指定为imshow,否则每个数据集将独立缩放。

现在,如果数组具有不同的宽度 (arrays = [array,(array*2)[:, :2],array*3]),您可以使用以下内容:

ax = plt.subplot()

vmin = min(a.min() for a in arrays)
vmax = max(a.max() for a in arrays)

W = 0
for i,a in enumerate(arrays):
    h,w = a.shape
    ax.imshow(a, vmin=vmin, vmax=vmax,
              extent=[W-0.5, (W+w)-0.5, h-0.5, -0.5])
    W+=w
ax.set_xlim(-0.5, W-0.5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多