Я пытаюсь построить 10 образцов из набора данных MNIST. По одной каждой цифры. Вот код:
import sklearn
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
mnist = datasets.fetch_mldata('MNIST original')
y = mnist.target
X = mnist.data
for i in range(10):
im_idx = np.argwhere(y == i)[0]
print(im_idx)
plottable_image = np.reshape(X[im_idx], (28, 28))
plt.imshow(plottable_image, cmap='gray_r')
plt.subplot(2, 5, i + 1)
plt.plot()
Почему-то на графике пропускается нулевая цифра.
Почему?
Попробуй это:
import sklearn
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
mnist = datasets.fetch_mldata('MNIST original')
y = mnist.target
X = mnist.data
fig, ax = plt.subplots(2,5)
ax = ax.flatten()
for i in range(10):
im_idx = np.argwhere(y == i)[0]
print(im_idx)
plottable_image = np.reshape(X[im_idx], (28, 28))
ax[i].imshow(plottable_image, cmap='gray_r')
Вывод:
Ладно, я понял. Проблема заключалась в том, что вы определяли подзаговор после построения imshow
. Итак, ваш первый подсюжет был перезаписан вторым. Чтобы ваш код работал, просто поменяйте порядок двух ваших команд следующим образом. Кроме того, я не понимаю, почему вы используете plt.plot()
в конце.
plt.subplot(2, 5, i + 1) # <-- You have put this command after imshow
plt.imshow(plottable_image, cmap='gray_r')
Вот еще одна альтернатива вашим знаниям:
fig = plt.figure()
for i in range(10):
im_idx = np.argwhere(y == i)[0]
plottable_image = np.reshape(X[im_idx], (28, 28))
ax = fig.add_subplot(2, 5, i+1)
ax.imshow(plottable_image, cmap='gray_r')
Вы также можете еще больше сократить код Скотта (опубликованный ниже), используя следующее:
fig, ax = plt.subplots(2,5)
for i, ax in enumerate(ax.flatten()):
im_idx = np.argwhere(y == i)[0]
plottable_image = np.reshape(X[im_idx], (28, 28))
ax.imshow(plottable_image, cmap='gray_r')
Ищете причину, по которой OP-код работал? +1 к вашему решению.
@ScottBoston: обнаружил проблему
Вот и голос за ваше решение :) Посмотрите мой альтернативный сокращенный ответ на ваш код