在二维空间上绘制tf-idf矩阵

时间:2019-01-08 13:28:04

标签: python matplotlib scatter-plot tf-idf

早上好, 我已经使用tf idf矩阵进行了k均值聚类,以便在歌曲文本中找到重复出现的主题。 最后,我得到了4个集群。我使用以下代码进行绘图:

from sklearn.manifold import TSNE
from sklearn.decomposition import TruncatedSVD
k = 4
tfs_reduced = TruncatedSVD(n_components=k, random_state=7).fit_transform(tfidf_matrix)
tfs_embedded = TSNE(n_components=2).fit_transform(tfs_reduced)

fig = plt.figure(figsize = (10, 10))
ax = plt.axes()
plt.scatter(tfs_embedded[:, 0], tfs_embedded[:, 1], c=labels)
plt.show()

该绘图似乎是正确的,但我无法添加说明图例,其中将所用的每种颜色分配给特定的群集。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

我相信您的代码有两个问题。

  1. 首先,您需要为要绘制的每个群集调用scatter()一次。由于您没有包含重现tfs_embedded变量所需的所有代码,因此我不知道您的情况将涉及到什么。但是,大概可以将数据细分为对散布函数的多次调用。
  2. 第二个问题是,您需要从轴而不是从图调用散点图(即,以ax.scatter代替plt.scatter)。

下面的示例代码将向您展示其工作方式。输出图为here

import matplotlib.pyplot as plt

x = [1,2,4,3,7,5]
y = [2.2,1.0,0.8,8.6,3.6,7.8]
C1 = 'red'
C2 = 'blue'
L1 = "Cluster 1"
L2 = "Cluster 2"
fig = plt.figure(figsize = (10, 10))
ax = plt.axes()
ax.scatter(x[0:3], y[0:3], label=L1, c=C1, edgecolors='none')
ax.scatter(x[3:6], y[3:6], label=L2, c=C2, edgecolors='none')
ax.legend()
plt.show()