Получение легенды в текстовом сюжете рынка (питон) - PullRequest
0 голосов
/ 18 мая 2018

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import offsetbox
from sklearn import (manifold, datasets, decomposition, ensemble)
import seaborn as sns

digits = datasets.load_digits(n_class=10)
X = digits.data
y = digits.target
n_samples, n_features = X.shape

tsne = manifold.TSNE(n_components=2, random_state=0, perplexity=40)
X_t = tsne.fit_transform(X)

X_t=pd.DataFrame(X_t)
y=pd.DataFrame(y)
XY=pd.concat([X_t,y], axis=1)
XY.columns = ['x', 'y', 'digit']

customPalette=sns.hls_palette(10, l=.7, s=1)


fig, axes = plt.subplots(figsize=(10,10))
axes.set_xlim(XY['x'].min()*0.98,XY['x'].max()*1.02)
axes.set_ylim(XY['y'].min()*0.98,XY['y'].max()*1.02)


for i in range(0,10):
    for l, row in XY.loc[XY['digit']==i,:].iterrows():
        plt.annotate(int(row['digit']), (row['x'], row['y']), 
        horizontalalignment='center', verticalalignment='center', 
        size=10, color=customPalette[i])
        plt.title('t-SNE')

В результате на следующем рисунке: t-SNE on MNIST

Я хотел бы добавить легенду, аналогичную следующей:

Легенда

1 Ответ

0 голосов
/ 18 мая 2018

Как на счет этого?

fig, axes = plt.subplots(figsize=(10,10))
axes.set_xlim(XY['x'].min()*0.98,XY['x'].max()*1.02)
axes.set_ylim(XY['y'].min()*0.98,XY['y'].max()*1.02)

for i in range(0,10):
    k=0
    for l, row in XY.loc[XY['digit']==i,:].iterrows():
        if k==0: 
            plt.plot(row['x'], row['y'], '.', color=customPalette[i], label=int(row['digit']))
            plt.legend(numpoints=1, markerscale=3)
            k += 1    
        plt.annotate(int(row['digit']), (row['x'], row['y']), horizontalalignment='center', verticalalignment='center', size=10, color=customPalette[i])
        plt.title('t-SNE')

enter image description here

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