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