Как добавить легенду на scatterplot - PullRequest
0 голосов
/ 28 ноября 2018

Я делаю упражнение для курса машинного обучения.Я добавил к матрице набор данных изображений в виде массивов в матрицу данных, затем стандартизировал его, а затем вычислил основные компоненты.Labels - это массив, содержащий для каждого изображения метку (то есть подкаталог, содержащий ее), который мне нужен для визуализации пар основных компонентов, в этой части первых двух.Профессором было предложено использовать функцию matplotli.scatter, я нашел функцию seaborn.scatterplot, которая кажется лучше, но ни с одним из них мне не удалось поставить легенду с именами меток.

pca = PCA()
X_t = pca.fit_transform(datamatrix)
X_r = pca.inverse_transform(X_t)

plt.figure(figsize=(25,5))

colours = ['r','g','b','p']
plt.subplot(1, 3, 1)
sns.scatterplot(X_t[:,0], X_t[:,1], hue=labels, palette=colours, legend='full')
plt.title('PC 1 and 2')

Я новичок в Python и в библиотеках машинного обучения

Редактировать: Как я и предлагал, я пытался изменить код:

data = {"x" : X_t[:,0], "y" : X_t[:,1], "label" : labels}
sns.scatterplot(x="x", y="y", hue="label", palette=colours, data=data, legend='full')

Но я получаю тот же результат: У меня есть легенда, но без названия надписи захват

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Seaborn scatterplot автоматически создаст легенду, как показано во втором примере из документации .Тем не менее, требуется, чтобы данные были в структуре, подобной словарю, что характерно для кадров данных pandas.

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

data = {"x" : np.random.rand(10),
        "y" : np.random.rand(10),
        "label" : np.random.choice(["Label 1", "Label 2"], size=10)}

sns.scatterplot(x="x", y="y", hue="label", data=data)
plt.show()

enter image description here

Чтобы добиться того же с помощью scatter matplotlib, вам нужно создать легенду самостоятельно, что на самом деле немного более громоздко,но может быть полезным для понимания.

import numpy as np
import matplotlib.pyplot as plt

data = {"x" : np.random.rand(10),
        "y" : np.random.rand(10),
        "label" : np.random.choice(["Label 1", "Label 2"], size=10)}

labels, inv = np.unique(data["label"], return_inverse=True)
scatter = plt.scatter(x="x", y="y", c = inv, data=data)

handles = [plt.Line2D([],[],marker="o", ls="", 
                      color=scatter.cmap(scatter.norm(yi))) for yi in np.unique(inv)]
plt.legend(handles, labels)

plt.show()

enter image description here

Также см. Добавление легенды на точечный график (PCA)

0 голосов
/ 28 ноября 2018

Перед показом сюжета добавьте легенду, используя:

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