gpt4 book ai didi

r - 可以强制不出现的元素显示在 ggplot 图例中吗?

转载 作者:行者123 更新时间:2023-12-04 12:36:00 25 4
gpt4 key购买 nike

我正在绘制一种叶绿素,其中最多包含三个可选择的物种丰度。这个玩具代码的行为符合预期,几乎可以满足我的要求:

library(dplyr)
library(ggplot2)
square <- expand.grid(X=0:10, Y=0:10)
sq2 <- square[rep(row.names(square), 2),] %>%
arrange(X,Y) %>%
mutate(SPEC = rep(c('red','blue'),len=n())) %>%
mutate(POP = ifelse(SPEC %in% 'red', X, Y)) %>%
group_by(X,Y) %>%
mutate(CLR = rgb(X/10,0,Y/10)) %>% ungroup()

ggplot(sq2, aes(x=X, y=Y, fill=CLR)) + geom_tile() +
scale_fill_identity("Species", guide="legend",
labels=c('red','blue'), breaks=c('#FF0000','#0000FF'))

生产这个:

X=red; Y=blue; plotted as gradient tiling

修改后的版本正确地绘制了真实 map ,适本地混合了 RGB 以显示每个 map 单元的物种比例。但考虑到混合,真实数据不一定包括 breaks中列出的具体数值。 ,在这种情况下,该物种的图例中不会出现任何条目。如果将示例的最后一行更改为
labels=c('red','blue','green'), breaks=c('#FF0000','#0000FF','#00FF00'))

您将获得与所示相同的图例,仅显示“红色”和“蓝色”,因为其中没有绿色。搜索每个 max(Species) 的数据并将它们分配给图例是可能的,但不会为仅以低比例出现的物种制作良好的图例键。图例需要的是显示存在实体的想法,而不是它们已证实的存在——即使只检测到一个物种,图例中也需要三种颜色。

我认为 scale_fill_manual()override.aes在这里争论可能对我有帮助,但我无法进行任何组合。

编辑:第四集——新的死胡同

(感谢 @r2evans 修正我遗漏的软件包。)
我想我可以通过将另一列变异到名为 spCLR 的处理管道中的 df 中来欺骗图例。表示对每个条目的物种进行编码的颜色(例如“#FF0000”)(冗余信息,但很好)。现在我真实版本中的绘图调用是:
df %>% [everything] %>%
ggplot(aes(x = X, y = Y, height = WIDTH, width = WIDTH, fill = CLR)) +
geom_tile() +
scale_fill_identity("Species", guide="legend",
labels=spCODE, breaks=spCLR)

但这给出了错误: Error in check_breaks_labels(breaks, labels) : object 'spCLR' not found .这似乎很奇怪,因为 spCLR确实在管道修改的 df 中,以及提供给 ggplot 函数的所有值 spCODE是原始 df 中唯一的一个——所以如果有某种范围问题,我不明白。 [重新编辑——我看到标签和中断都不想看 df$anything。反正。]

我认为(正确?)有某种方法可以使这个工作[?],但它仍然不会使我的玩具示例中的图例显示“红色”、“蓝色”和“绿色”——这就是我原来的问题实际上是关于 - 因为其中仍然没有实际的绿色数据。所以重申一下,有没有办法强制 ggplot2 图例显示您想要谈论的内容,而不仅仅是数据中存在的内容?

最佳答案

我很晚才发现我的问题与 this 几乎重复.那里接受的答案(来自@joran)对此不起作用,但第二个答案(来自@Axeman)适用。所以我去这里的方式是最后一行应该是

labels=c('red','blue','green'), limits=c('#FF0000','#0000FF','#00FF00'))

调用 limits()而不是 breaks() ,现在我的示例和我的真实版本可以正常工作。

我不得不说我花了很多时间在 ggplot2 中挖掘 reference从来没有怀疑过limits() 是breaks() 的正确替代品——这在引用页面中明确提到,而limits() 没有出现。 ?limits() 页面的信息量很低,我找不到任何说明两者之间区别的内容:当这个而不是那个。

关于r - 可以强制不出现的元素显示在 ggplot 图例中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58492013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com