R plot图例不根据点显示颜色

R plot legend not showing colors according to points

所以我在 R 中画了一个图,用很多不同的颜色表示一个点属于我的 23 个类别中的哪一个。点的颜色是通过向量(stratumcol,是一个有23级的因子)相加。

当我添加图例时,试图让它显示颜色及其类别,但它们似乎不匹配(使用 ordihull 测试,见下图)。

这是我的剧情代码:

plot(pca_nmdsscores, type = "n")
points(pca_nmdsscores, col=stratumcol, cex=1.5, pch = 15)
legend("right","top",levels(stratumcol),cex=.8, col = as.numeric(stratumcol), pch =15, lty = 0) # pch = stratumcol
ordihull(pca_nmdsscores, groups = stratumcol,draw = "polygon", col ="purple",label = T, show.groups = "LateMoistRich")
ordihull(pca_nmdsscores, groups = stratumcol,draw = "polygon", col ="blue",label = T, show.groups = "MidWetPoor")

在这里我的 Rplot 应该是可见的。如您所见,我的类别 "MaleMoistRich" 将点连接成粉红色,但在图例中这种颜色被命名为 "MidMoistRich".

同"MidWetPoor",连接中间的蓝色点,图例中这个颜色指的是"LateMoistPoor"。

如何解决这个问题?

我尝试寻找解决方案,但没有找到任何可以解决它的方法 - 包括 "unique"(这不会改变任何东西,因为我的调色板已经定义了 23 种颜色,所以不需要无论如何都要回收它们)

[R 绘图,显示图例和点颜色][1]

好的 - 因为我是新手,所以我无法上传我的情节图片...

但请在此处查看:http://i.stack.imgur.com/pzn2y.png

/谢谢

编辑: 解决方案是不对我的因素使用 levels() !不在 legend = levels(stratumcol) 中,也不在 col = levels(stratumcol) 中。 Richard 和 DeveauP 建议的级别可能是问题所在。

这产生了一个新问题:我的图例显示了整个因素,而不仅仅是其中的水平(但颜色对应于正确的点颜色,这是原始问题)。

这个新问题已通过使用 "unique()" 而不是 "levels()" 解决。

legend("Right","top",legend=unique(stratumcol), cex=.8, col = unique(stratumcol), pch=15, lty=0)

我找到了解决方案

尝试

legend("right","top",legend = levels(stratumcol),cex=.8, col = levels(stratumcol), pch =15, lty = 0)