【问题标题】:How to plot multiple numpy array in one figure?如何在一个图中绘制多个 numpy 数组?
【发布时间】:2020-10-11 00:15:24
【问题描述】:

我知道如何绘制单个 numpy 数组

import matplotlib.pyplot as plt
plt.imshow(np.array)

但是有没有办法在一个图中绘制多个 numpy 数组?我知道plt.subplots() 可以显示多张图片。但就我而言,这似乎很难。我尝试使用for 循环。

fig, ax = plt.subplots()
for i in range(10):
   ax.imshow(np.array)  # i_th numpy array

这似乎一个一个地绘制了一个 numpy 数组。有什么方法可以将我所有的 10 个 numpy 数组绘制在一个图中?

PS:这里我的每个 2d numpy 数组都代表图片的像素。 plot 似乎绘制了不适合我的情况的线条。

【问题讨论】:

  • 我不清楚您希望看到的最终结果是什么。您的 10 个数组是否具有相同的尺寸?如果是这样:将这 10 个数组“一起”绘制后,您想要的结果是什么?如果您继续绘制最新的数组,则只会与其他数组重叠。
  • @stfwn 是的,它们是相同的维度。我想要的结果是三排无花果。每行无花果数为4,4,2

标签: python numpy matplotlib


【解决方案1】:

plt.subplots()(here) 的文档指定它接受 nrowsncols 参数并返回 fig 对象和 ax 对象数组。对于你的情况,这看起来像这样:

fig, axs = plt.subplots(3, 4)

axs 现在包含一个填充有ax 对象的二维数组,您可以使用这些对象绘制各种事物,例如axs[0,1].plot([1,2],[3,4,]) 会在第一行第二列绘制一些东西。

如果您想删除特定的 ax 对象,您可以使用 .remove() 来执行此操作,例如axs[0,1].remove().

对于.imshow,它的工作方式与.plot 完全相同:选择您想要的斧头并在其上调用imshow

为您的案例提供模拟图像数据的完整示例是:

import numpy as np
import matplotlib.pyplot as plt

fig, axs = plt.subplots(3, 4)
images = [np.array([[1,2],[3,4]]) for _ in range(10)]
for i, ax in enumerate(axs.flatten()):
    if i < len(images):
        ax.imshow(images[i])
    else:
        ax.remove()
plt.show()

结果如下:

【讨论】:

  • OP 不想在不同的子图中绘图。 OP 想在同一个图上覆盖多个数组
  • 很抱歉忽略了重要信息。我这里的 numpy 数组代表图片的像素(numpy 数组的形状为 128*128)。我尝试使用 axs.plt,它绘制线条。我想我还是需要使用 plt.imshow 来显示图片。
  • imshow 的工作方式与 plot 的工作方式相同。我编辑了我的答案以显示一个完整的例子。
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 2021-07-17
  • 2012-09-20
  • 1970-01-01
  • 2013-08-15
  • 2021-02-26
  • 1970-01-01
  • 2019-10-31
相关资源
最近更新 更多