【问题标题】:R plot legend not showing colors according to pointsR绘图图例未根据点显示颜色
【发布时间】: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


【解决方案1】:

试试

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

【讨论】:

  • 我所做的是删除“levels()”,这解决了问题,但导致了一个新问题 --> 重复我的因素 130 次,而不是图例只显示 23 个级别. ##### 我尝试按照@Richard Telford 的建议解决它,但添加 col = levels(stratumcol) 返回错误:“invalid colorname 'EarlyDryPoor'”,并且没有显示任何图例。
  • 我可能必须根据它们在因子列中出现的顺序手动定义图例,即使我不想对所有因子都这样做......
  • 好的,我误解了您的数据是如何排列的。你是如何指定颜色的?用调色板?如果是这样 col = 1:23 将起作用。
  • 是的,我有一个定义了 23 种颜色的调色板,所以这些颜色不会重复 - 好吧,当它们被分配到的级别在图例中重复时,它们会重复。 ##### 所以我原来的图例没有显示与情节对应的正确颜色的问题已经解决了。该解决方案刚刚产生了一个新问题:图例现在按照它们在因子中出现的顺序列出了级别 - 显示了所有 130 个点及其各自的级别,而不仅仅是 23 个级别(这是通常发生的情况)。 ### 不幸的是 col = 1:23 没有解决重复问题。感谢您提供想法!
  • 我找到了解决办法!感谢@Richard 和@DeveauP 解决了我最初的问题!我的后续问题的解决方案我将在我的问题中作为编辑发布:)
猜你喜欢
  • 2014-10-12
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2019-08-06
相关资源
最近更新 更多