Диаграмма рассеяния T-SNE с легендой на основе имен столбцов - PullRequest
1 голос
/ 17 января 2020

Диаграмма рассеяния T-SNE, которую я имею, печатает нормально, но печатает все те же цвета, и легенды нет. У меня огромные проблемы с этим. Для SeaBorn это будет «оттенок», для Matplotlib - «1007 *». В общем, мне действительно нужна помощь в определении легенды с A, B, C (названия столбцов) и связывании ее (A, B, C) с цветом на графике рассеяния.

Мои данные следующие:

  A    B    C
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

a = pd.DataFrame(data_files, columns = ['A'])
b = pd.DataFrame(data_files, columns = ['B'])
c = pd.DataFrame(data_files, columns = ['C'])

test_array = [a,b,c]
data_elem  = pd.concat(test_array, axis = 1, sort = False)

model     = TSNE(n_components = 2, perplexity = 50, learning_rate = 100, random_state  = None)
tsne_data = model.fit_transform(data_elem)
tsne_df   = pd.DataFrame(tsne_data)

htw = tsne_df.to_numpy(copy = True)
tsne_df['tsne_x'] = htw[:, 0]
tsne_df['tsne_y'] = htw[:, 1]

sns.scatterplot(
      x       = "tsne_x",
      y       = "tsne_y",
      #hue     = "",       <--issue is here
      palette = "Greens",
      data    = tsne_df,
      legend  = "full",
      alpha   = 0.3

   )

plt.xlabel("Dimension_X")
plt.ylabel("Dimension_Y")

plt.legend(loc = 'upper right')
plt.show()

Ничего из того, что я пробовал, не работает. Я продолжаю получать ошибки, например KeyError или другие, пытаясь определить 'hue' или 'c', если вы используете matplotlib

1 Ответ

1 голос
/ 23 января 2020

Мне кажется, я решил это. Убедитесь, что перед помещением DataFrame в T-SNE вы отделяете данные от меток.

data_elem_data                  = data_elem
data_elem_label                 = labels go here (must be 1 dimensional)

Мне нужно было сгладить data_elem_label, прежде чем объединять его со всем.

data_elem_label  = data_elem_label.values.flatten() 

T-SNE создает два столбца (x, y), поэтому добавьте третий столбец, который будет столбцом метки. Итак ... добавьте разделенный столбец метки (с начала) к завершенному T-SNE.

Т.е.:

tsne_df = pd.concat([tsne_df, pd.Series(data_elem_label)], axis = 1) 

И это то, что сработало для меня.

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