Python matplotlib: легенда дает неверный результат для разброса - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь визуализировать модный набор данных MNIST с различными методами уменьшения размеров, и я также хочу прикрепить легенду к полученному изображению с помощью так называемых real_labels, которые сообщают реальное имя метки. Для моды MNIST настоящие этикетки:

real_labels = ['t-shirt','trouser','pullover','dress','coat','sandal','shirt','sneaker','bag','ankle boot']

Я выполняю черчение внутри следующей функции:

def Draw_datasamples_to_figure(X_scaled, labels, axis):
    y = ['${}$'.format(i) for i in labels]
    num_cls = len(list(set(labels)))
    for (X_plot, Y_plot, y1, label1) in zip(X_scaled[:,0], X_scaled[:,1], y, labels):
        axis.scatter(X_plot, Y_plot, color=cm.gnuplot(int(label1)/num_cls),label=y1, marker=y1, s=60)

, где X_scaled указывает координаты x и y, метки представляют собой целые числа (0-9) для информации о классе, а ось указывает, в каком окне будет отображаться изображение подплота.

Легенда нарисована с помощью следующей команды:

ax3.legend(real_labels, loc='center left', bbox_to_anchor=(1, 0.5))

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

enter image description here

Я знаю, что проблема, вероятно, в точечной части, и я должен реализовать ее по-другому, но я надеюсь, что я все еще упускаю что-то простое, что может исправить мою реализацию. Я также не хочу использовать легенду ручной работы, в которой маркеры и имена определены в коде, потому что у меня есть и другие наборы данных с различными классами и реальными именами меток. Заранее спасибо!

...