可以强制非出现元素显示在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'))

产生这个:

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

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

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

您将获得与所示相同的图例,仅显示“红色”和“蓝色”,因为其中没有绿色。可以搜索每个max(Species)的数据并将其分配给图例,但是对于仅以低比例出现的物种而言,这并不是很好的图例关键字。对于图例来说,需要的是显示存在实体概念,而不是它们经证实的存在-即使只检测到一种物种,图例中也要显示三种颜色。

我会认为scale_fill_manual()override.aes参数可能会帮助我在这里,但我一直没能做出任何组合的工作。

编辑:
第四集-一个新的死胡同

(感谢@ r2evans解决了我遗漏的软件包问题。)我认为我可以通过在处理管道中将另一列突变为df来欺骗传说,spCLR以代表每种颜色的颜色(例如,“#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 $任何东西。无论如何。]

我认为(正确吗?)有某种方法可以使这一功能奏效[?],但仍无法使图例在玩具示例中显示“红色”,“蓝色”和“绿色”,这就是我的原始作品这个问题真的是关于-因为其中仍然没有实际的绿色数据。因此,重申一下,是否有任何方法可以迫使ggplot2图例显示您要谈论的内容,而不仅仅是显示数据中存在的内容?

超级克莱姆

我后来才发现,我的问题几乎与重复那里接受的答案(来自@joran)对此不起作用,但是第二个答案(来自@Axeman)起作用。所以我要走的路是最后一行应该是

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

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

我不得不说我花了很多时间在ggplot2引用中进行挖掘,而从未怀疑过limit()是breaks()的正确替代品-在该参考页中明确提到了,而limit()没有出现。?limits()页面是非常没有信息的,我找不到任何能说明两者之间区别的内容:何时而不是那样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以强制元素显示其悬停效果吗?

来自分类Dev

图例未出现在ggplot中

来自分类Dev

更改ggplot(R)中图例元素的颜色

来自分类Dev

我可以在ggplot图例中自定义单个项目吗?

来自分类Dev

在ggplot中显示条形图的图例

来自分类Dev

在ggplot中显示条形图的图例

来自分类Dev

在ggplot中以百万计显示图例

来自分类Dev

在ggplot中显示条形图的图例

来自分类Dev

在 ggplot 中定义和显示图例

来自分类Dev

如何在我的 ggplot 中显示图例?

来自分类Dev

无法在图例中添加元素(iNEXT / ggplot2)

来自分类Dev

在ggplot2中更改图例标题时出现幻影图例?

来自分类Dev

如何在ggplot图例中显示更多气泡大小?

来自分类Dev

ggplot2中的比例图例显示

来自分类Dev

如何阻止R ggplot在图例中显示“ a”作为符号?

来自分类Dev

如何在ggplot2的图例中显示缺失值?

来自分类Dev

即使没有数据系列,我也可以强制输入图例吗?

来自分类Dev

不要在2图例图(R ggplot2)中的颜色图例中显示形状

来自分类Dev

您可以强制所有行显示在屏幕上吗?

来自分类Dev

ggplot中图例的顺序

来自分类Dev

用 ggplot 显示某些图例

来自分类Dev

我可以使用JavaScript在Chrome浏览器中显示HTML元素吗?

来自分类Dev

有人可以帮助我以多种定义的美感正确设置我的ggplot图例吗?

来自分类Dev

ggplot2:修改散点图{ggplot2}中两个因素的图例元素?

来自分类Dev

ggplot2:修改散点图{ggplot2}中两个因素的图例元素?

来自分类Dev

将非出现因素添加到R中的数据帧

来自分类Dev

TLD中<short-name>是<taglib>的强制子元素吗?

来自分类Dev

锚元素中的 href 是强制性的吗?

来自分类Dev

您可以在Perl中强制刷新输出吗?

Related 相关文章

热门标签

归档