我的T-SNE散点图可以很好地打印,但是可以打印出所有相同的颜色,并且没有图例。我对此有很大的麻烦。对于SeaBorn,它将是'hue',对于Matplotlib,它将是'c'。总而言之,我确实需要帮助来定义具有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()
我没有尝试过任何工作。如果您使用的是matplotlib,我会尝试定义'hue'或'c'来不断收到错误,即KeyError或其他错误
最佳答案
我相信我解决了。
确保在将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)
那就是对我有用的。