小编uhC*_*lem的帖子

可以强制非出现元素显示在 ggplot 图例中吗?

我正在绘制一个研究区域内最多三种可选物种丰度的叶绿素。这个玩具代码的行为符合预期,几乎达到了我想要的效果:

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'))
Run Code Online (Sandbox Code Playgroud)

产生这个:

X=红色; Y=蓝色; 绘制为渐变平铺

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

labels=c('red','blue','green'), breaks=c('#FF0000','#0000FF','#00FF00'))
Run Code Online (Sandbox Code Playgroud)

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

我认为这个scale_fill_manual()override.aes论证可能对我有帮助,但我无法使任何组合发挥作用。

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

(感谢 @r2evans 修复了我遗漏的包。)我想我也许可以通过将另一列突变到处理管道中的 df 中来欺骗图例,spCLR该管道被称为代表每个代码的颜色(“#FF0000”,例如)条目的物种(冗余信息,但很好)。现在我的真实版本中的绘图调用如下:

df %>% [everything] %>%
    ggplot(aes(x = X, y = Y, …
Run Code Online (Sandbox Code Playgroud)

r legend heatmap ggplot2

6
推荐指数
1
解决办法
1023
查看次数

标签 统计

ggplot2 ×1

heatmap ×1

legend ×1

r ×1