【发布时间】:2016-07-19 15:18:58
【问题描述】:
所以我在 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”。
我该如何解决这个问题?
我尝试寻找解决方案,但没有遇到任何可以解决它的方法 - 包括“独特”(它不会改变任何东西,因为我的调色板已经定义了 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)
我找到了解决办法
【问题讨论】:
-
我看到你在图例中放了“col = as.numeric(stratumcol)”,这可能会改变与因子相比的顺序(数字1不一定是第一个因子)。如果删除 as.numeric 会发生什么?
-
这不会改变任何东西。我添加它是为了尝试修复它 - 它也没有:)
-
问题可能与您使用图例有关。如果 stratumcol 是一个因子, as.numeric() 将返回因子代码而不是颜色。同样 as.numeric(stratumcol) 将以向量的任何顺序而不是对应于levels()的顺序给出向量。
-
现在我在想 - 与“stratumcol”相比,levels() 指示符是否可以改变添加到图例的颜色顺序? Stratumcol 是一个有 129 行的因子,并且水平在不同时间弹出?嗯,不应该……
-
可能已经发现了问题:水平会为您的因素排序。所以levels(stratumcol) 和as.numeric(stratumcol) 的顺序可能不同。 -- 迟到了 2 分钟,Richard 发现了我面前的问题!
标签: r plot colors legend points