Matplotlib - матрица 10 x 10, заполняющая только последний экземпляр - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь построить 100 случайных изображений из набора данных notMNIST в матрице 10x10, однако только последний субплот возвращает изображение.Данные изображения хранятся в x, а метки в y.

import matplotlib.pyplot as plt 
%matplotlib inline

num_subplots = 10
fig, ax = plt.subplots(nrows=num_subplots, ncols=num_subplots, figsize=(10, 6))
for idx in range(10): 
    n = np.random.randint(np.sum(y < 0), len(y))
    imgl = x[n,:].reshape((28,28))
    imshow(imgl, cmap = plt.get_cmap('gray'))
plt.show()

1 Ответ

0 голосов
/ 13 сентября 2018

Если вы позвоните plt.imshow(), график всегда будет отображаться в текущем активном субплоте, который, в вашем случае, является последним субплотом, который был создан.Вместо этого вы можете перебрать все вспомогательные участки и вызвать imshow() на самих вспомогательных участках, используя объектно-ориентированный синтаксис matplotlib.Когда вы генерируете массив подзаголовков, функция subplots() возвращает массив 2d numpy, который сначала необходимо преобразовать в итерацию 1D, чего можно добиться с помощью функции ravel().См. Приведенный ниже код для полного примера.

import matplotlib.pyplot as plt 
%matplotlib inline

num_subplots = 10
fig, axes = plt.subplots(nrows=num_subplots, ncols=num_subplots, figsize=(10, 6))
for idx,ax in enumerate(axes.ravel()): 
    n = np.random.randint(np.sum(y < 0), len(y))
    imgl = x[n,:].reshape((28,28))
    ax.imshow(imgl, cmap = plt.get_cmap('gray'))
plt.show()

Обратите внимание, что я переименовал оригинал с ax на axes, чтобы было более очевидно, что у вас есть много вспомогательных участков (экземпляров Axes).Также обратите внимание, что, если вы хотите больше контроля, вы можете циклически проходить по строкам и столбцам вашего подплота.В этом случае вы должны использовать два цикла for и получать доступ к своим подсюжетам, используя axes[row,col], что-то вроде этого:

for row in range(num_subplots):
   for col in range(num_subplots):
      #some code here
      axes[row,col].imshow(...)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...