将着色目标区域添加到ggplot2条形图

时间:2016-06-16 23:01:34

标签: r ggplot2

我有两个数据框:一个用于在条形图中创建条形图,另一个用于创建阴影"目标区域"在使用geom_rect的栏后面。

以下是示例数据:

test.data <- data.frame(crop=c("A","B","C"), mean=c(6,4,12))
target.data <-  data.frame(crop=c("ONE","TWO"), mean=c(31,12), min=c(24,9), max=c(36,14))

我从test.data的方法开始,以及目标区域中的行的target.data的方法:

library(ggplot2)
a <- ggplot(test.data, aes(y=mean, x=crop)) + geom_hline(aes(yintercept = mean, color = crop), target.data) + geom_bar(stat="identity")
a

enter image description here

到目前为止一直很好,但是当我尝试添加阴影区域来显示target.data的最小 - 最大范围时,就会出现问题。阴影区域看起来很好,但不知何故,来自target.data的作物被添加到x轴。我不确定为什么会这样。

b <- a + geom_rect(aes(xmin=-Inf, xmax=Inf, ymin=min, ymax=max, fill = crop), data = target.data, alpha = 0.5)
b

enter image description here

如何在不将这些额外名称添加到条形图的x轴的情况下添加geom_rect形状?

1 个答案:

答案 0 :(得分:1)

这是您问题的解决方案,但我想更好地了解您的问题,因为我们可以制作更具解释性的情节。您所要做的就是在geom_rect()调用中添加aes(x = NULL)。我冒昧地改变了变量&#39; crop&#39;在add.data to&#39; brop&#39;尽量减少混淆。

test.data <- data.frame(crop=c("A","B","C"), mean=c(6,4,12))
add.data <-  data.frame(brop=c("ONE","TWO"), mean=c(31,12), min=c(24,9), max=c(36,14))

ggplot(test.data, aes(y=mean, x=crop)) +
  geom_hline(data = add.data, aes(yintercept = mean, color = brop)) +
  geom_bar(stat="identity") +
  geom_rect(data = add.data, aes(xmin=-Inf, xmax=Inf, x = NULL, ymin=min, ymax=max, fill = brop),
    alpha = 0.5, show.legend = F)

在ggplot调用中,所有美学或aes()都是从初始调用继承的:

ggplot(数据,aes(x = foo,y = bar))。

这意味着无论我在geom_rect(),geom_hline()等上添加了哪些图层,ggplot都在寻找&#39; foo&#39;分配给x和&#39; bar&#39;分配给y,除非你特别说明。所以像aeosmith指出的那样,你可以使用inherit.aes = FALSE清除所有继承的aethesitcs,或者你可以通过将它们重新分配为NULL来一次删除单个变量。