R 保存颜色绘制k-均值簇以查看随时间的演化

R 保存颜色绘制k-均值簇以查看随时间的演化,r,plot,k-means,pca,R,Plot,K Means,Pca,我正在crunchbase数据集上进行PCA,以分析每年的投资行为。我用R来表示这个。我为2000年到2012年的这几年创作了一些情节。不过,我需要做的是在最后制作一个视频,展示投资者(用点表示)是如何随时间变化的。我使用k-means聚类,并使用聚类进行着色 这是我的问题: 每次我计算新的一年的pca和k-均值聚类时,R用不同的颜色绘制聚类 这就是我想要实现的目标: 保存2000年初期每个点(代表投资公司)的颜色,因此如果我计算未来几年的PCA,我将用2000年的相同颜色绘制该点 棘手的部分:

我正在crunchbase数据集上进行PCA,以分析每年的投资行为。我用R来表示这个。我为2000年到2012年的这几年创作了一些情节。不过,我需要做的是在最后制作一个视频,展示投资者(用点表示)是如何随时间变化的。我使用k-means聚类,并使用聚类进行着色

这是我的问题: 每次我计算新的一年的pca和k-均值聚类时,R用不同的颜色绘制聚类

这就是我想要实现的目标: 保存2000年初期每个点(代表投资公司)的颜色,因此如果我计算未来几年的PCA,我将用2000年的相同颜色绘制该点

棘手的部分: 这些年来,一些投资公司不断增加,我不想给这些年来增加的公司涂上颜色

这是2000年的初始绘图的样子:

这就是2001年的情节:

inv.mat <- cast(invtop[,1:4], investor_name~company_market, sum)
inv.names <- inv.mat$investor_name
inv.mat <- inv.mat[,3:29] 
inv.log <- log(inv.mat)
inv.log[inv.log == -Inf] <- 0
fit <- kmeans(inv.log, 4, nstart= 30)
pca <- prcomp(inv.log)
pca <- as.matrix(pca$x)
plot(pca[,2], pca[,1], pch = 16, cex = 1 ,col = fit$cluster,   xlab="Principal Component 1", ylab="Principal Component 2", main="VC firms")
这只是给不同簇中的所有簇着色。但是没有考虑到2000年以来圆点的颜色,所以我无法比较。

下面是我使用的代码示例:

inv.mat <- cast(invtop[,1:4], investor_name~company_market, sum)
inv.names <- inv.mat$investor_name
inv.mat <- inv.mat[,3:29] 
inv.log <- log(inv.mat)
inv.log[inv.log == -Inf] <- 0
fit <- kmeans(inv.log, 4, nstart= 30)
pca <- prcomp(inv.log)
pca <- as.matrix(pca$x)
plot(pca[,2], pca[,1], pch = 16, cex = 1 ,col = fit$cluster,   xlab="Principal Component 1", ylab="Principal Component 2", main="VC firms")

inv.mat我不太了解您的问题:

  • 你想保留第一个情节中的颜色吗?(是的)
  • 您的数据输入历年是否相同?(否)
如果要保留第一个yerar中的颜色,只需编写
col=fit1$cluster
were
fit1
是第一个时间点的聚类分析

因此,您首先需要构建一个向量(例如,称为
clus.col
),其中包含各年中所有可用的公司

问题是,您需要为每种颜色定义颜色,如果仅在第一年定义颜色,您可能会错过其中一些颜色(除非在第一年中,所有颜色都已呈现)。
一旦你为每个图定义了
clus.col
,你就应该取一个子集,其中只包含出现在上面的个人。

是的,第一个图中的点代表一家投资公司,我想将该颜色指定给该特定公司。因此,该投资公司在其他地块中具有相同的颜色。我的数据输入如下:“投资者名称”、“公司名称”、“公司市场”、“募集金额”、“投资者市场”、“资金年”。基本上,投入全年都在变化,因为不是每年每个投资公司都会资助一些公司。因此,这些年来,公司不断增加或减少。我会在了解更多细节后编辑我的答案。您的第一个时间点中是否有所有可用的公司?不幸的是,情况并非如此。所以你说我必须用所有可用的公司名称建立一个初始向量。那么,在我的初始绘图中,我将如何仅为其中的一个子集着色。在接下来的几年里,我将如何继续?如果你有一个向量
clus.col
和所有公司的颜色,你只需要调用
plot(…,col=clus.col[cl1.names])
being
cl1.names
一个逻辑向量,表明公司是否参与了集群分析,它没有按照我的预期工作。所以我有一个命名向量,包含所有可用的公司和一个颜色值。我根据2000年PCA集群颜色更改了该命名向量的颜色值,这样2000年PCA集群中不可用的所有其他公司都有不同的值。现在,当我想分配颜色时:“col=color[clusterColorInvestorNames]”仍在更改颜色。