Несколько цифр в одном окне

Я хочу создать функцию, которая отображает на экране набор цифр в одном окне. К этому моменту я пишу этот код:

import pylab as pl
def plot_figures(figures):
 """Plot a dictionary of figures.
 Parameters
 ----------
 figures : <title, figure=""> dictionary
 """
 for title in figures:
 pl.figure()
 pl.imshow(figures[title])
 pl.gray()
 pl.title(title)
 pl.axis('off')
</title,>

Он работает отлично, но я хотел бы иметь возможность рисовать все фигуры в одном окне. И этого кода нет. Я кое-что прочитал о подзаголовке, но это выглядит довольно сложно.

3 ответа

Вы можете определить функцию, основанную на команде subplots (обратите внимание на s в конце, отличную от команды subplot, указанной по urinieto) matplotlib.pyplot.

Ниже приведен пример такой функции, основанной на вашем, позволяющей нарисовать оси мультипликатора на фигуре. Вы можете определить количество строк и столбцов, которые вы хотите в макете рисунков.

def plot_figures(figures, nrows = 1, ncols=1):
 """Plot a dictionary of figures.
 Parameters
 ----------
 figures : <title, figure=""> dictionary
 ncols : number of columns of subplots wanted in the display
 nrows : number of rows of subplots wanted in the figure
 """
 fig, axeslist = plt.subplots(ncols=ncols, nrows=nrows)
 for ind,title in zip(range(len(figures)), figures):
 axeslist.ravel()[ind].imshow(figures[title], cmap=plt.gray())
 axeslist.ravel()[ind].set_title(title)
 axeslist.ravel()[ind].set_axis_off()
 plt.tight_layout() # optional
</title,>

В принципе, функция создает на рисунках количество осей в соответствии с количеством строк (nrows) и столбцами (ncols), которые вы хотите, а затем итерации по списку оси для построения ваших изображений и добавляет заголовок для каждого из них.

Обратите внимание, что если у вас есть только одно изображение в словаре, ваш предыдущий синтаксис plot_figures(figures) будет работать, поскольку nrows и ncols по умолчанию установлены на 1.

Пример того, что вы можете получить:

import matplotlib.pyplot as plt
import numpy as np
# generation of a dictionary of (title, images)
number_of_im = 6
figures = {'im'+str(i): np.random.randn(100, 100) for i in range(number_of_im)}
# plot of the images in a figure, with 2 rows and 3 columns
plot_figures(figures, 2, 3)


Вы должны использовать subplot.

В вашем случае это будет что-то вроде этого (если вы хотите, чтобы они были сверху друг друга):

fig = pl.figure(1)
k = 1
for title in figures:
 ax = fig.add_subplot(len(figures),1,k)
 ax.imshow(figures[title])
 ax.gray()
 ax.title(title)
 ax.axis('off')
 k += 1

Просмотрите документацию для других параметров.


Я не уверен, почему я не мог получить принятый ответ, используя мои данные, но вот мое решение, если кто-то его хочет использовать.

X_train - это список изображений в этом случае, а y_train - числовая метка. Индексная переменная выбирается случайным образом, и у нас есть номер остановки 8, чтобы убить операцию.

Цифры, отображающие график, представляют собой словарь отображаемых изображений/меток, а 2 представляют строки, а 4 - столбцы.

number_to_stop = 8
figures = {}
for i in range(number_to_stop):
 index = random.randint(0, n_train-1)
 figures[y_train[index]] = X_train[index]
plot_figures(figures, 2, 4)

licensed under cc by-sa 3.0 with attribution.