Как отобразить несколько массивов numpy на одном рисунке?

#python #numpy #matplotlib

#python #numpy #matplotlib

Вопрос:

Я знаю, как отобразить один массив 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 кажется, строит линии, которые не подходят в моем случае.

Комментарии:

1. Мне неясно, что вы хотите видеть в качестве конечного результата. Имеют ли ваши 10 массивов одинаковые размеры? Если да: каков ваш желаемый результат после построения этих 10 массивов «вместе»? Если вы продолжите построение нового массива, он просто перекрывает остальные.

2. @stfwn Да, они имеют одинаковое измерение. Моим желаемым результатом было бы три ряда фиговых фигур. Количество фигов в каждой строке равно 4,4,2

Ответ №1:

В документации для plt.subplots() (здесь ) указано, что он принимает nrows ncols аргументы and и возвращает fig объект и массив ax объектов. В вашем случае это будет выглядеть так:

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

axs теперь содержит 2D-массив, заполненный ax объектами, которые вы можете использовать для отображения различных объектов, например axs[0,1].plot([1,2],[3,4,]) , для отображения чего-либо в первой строке, во втором столбце.

Если вы хотите удалить определенный ax объект, вы можете сделать это с .remove() помощью, например axs[0,1].remove() .

Потому .imshow что это работает точно так же, как .plot : выберите нужный ax и вызовите 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()
  

С результатом:

введите описание изображения здесь

Комментарии:

1. OP не хочет отображать разные подзаголовки. OP хочет наложить несколько массивов на один и тот же рисунок

2. Извините за игнорирование важной информации. Мой массив numpy здесь представляет пиксель изображения (форма массива numpy равна 128 * 128). Я пытался использовать axs.plt, он отображает строки. Я думаю, мне все еще нужно использовать plt.imshow для отображения изображения.

3. Для imshow этого работает так же, как и для plot . Я отредактировал свой ответ, чтобы показать полный пример.