基于列名的带有图例的 T-SNE 散点图

Posted

技术标签:

【中文标题】基于列名的带有图例的 T-SNE 散点图【英文标题】:T-SNE Scatter Plot with Legend Based on the Column Names 【发布时间】:2020-05-04 13:40:15 【问题描述】:

我的 T-SNE 散点图打印得很好,但打印出来的颜色都是一样的,而且没有图例。我在这方面遇到了很大的麻烦。对于 SeaBorn,它将是“色调”,对于 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 或其他错误

【问题讨论】:

您实际尝试过什么,最近一次或多次尝试的全部错误是什么? @G.Anderson 我试过了:tsne_df['col']: ["A"]*len(a) + ["B"]*len(b) + ["C"]* len(c) hue ="col" ` 错误是:ValueError:无法解释输入'col' 我也尝试删除标签并将它们添加到单独的变量中,但我认为我没有正确 如果你想使用 seaborn,你需要将你的数据框从宽格式融合到长格式。如果你想使用 matplotlib,你可以遍历列 for col in df.columns: plt.scatter(df.index.values, df[col].values, label=col)。如果你想使用 pandas,你可以这样做 df.plot.scatter() @ImportanceOfBeingErnest 我是在通过 tsne 之前还是之后融化数据框? 【参考方案1】:

我相信我解决了它。 确保在将 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) 

这对我有用。

【讨论】:

以上是关于基于列名的带有图例的 T-SNE 散点图的主要内容,如果未能解决你的问题,请参考以下文章

可视化实验十:利用Python绘制棒图散点图

r 散点图散点图R.

100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图三维散点图散点图矩阵)

R数据可视化初阶-散点图散点图矩阵相关系数

R语言可视化:散点图散点图和折线图(line charts)3D散点图旋转3D散点图气泡图corrgram包可视化相关性矩阵马赛克图( Mosaic plots)hexbin密度图

编码颜色时向散点图添加图例