删除ggplot中的图层图例

时间:2012-03-26 14:06:49

标签: r ggplot2 legend

另一个ggplot传奇问题!

我有一个

形式的数据集
test <- data.frame(
  cond = factor(rep(c("A", "B"), each=200)), 
  value = c(rnorm(200), rnorm(200, mean=0.8))
)

所以两组和一些值我想绘制密度。我还想在图中添加一行表示每组的平均值,所以我:

test.cdf <- ddply(test, .(cond), summarise, value.mean=mean(value))

然后在ggplot中调用:

ggplot(test, aes(value, fill=cond)) + 
  geom_density(alpha=0.5) + 
  labs(x='Energy', y='Density', fill='Group') + 
  opts(
    panel.background=theme_blank(), 
    panel.grid.major=theme_blank(), 
    panel.grid.minor=theme_blank(), 
    panel.border=theme_blank(), 
    axis.line=theme_segment()
  ) + 
  geom_vline(data=test.cdf, aes(xintercept=value.mean, colour=cond), 
    linetype='dashed', size=1)

如果运行上面的代码,您会得到一个图例,表示每个组,但也有一个表示平均指示符vline。我的问题是如何摆脱geom_vline()的传奇?

1 个答案:

答案 0 :(得分:16)

根据您使用的ggplot2版本,您会遇到此问题。在R2.14.1上使用ggplot2 vs 0.9.0我得到了这个图:

enter image description here

不包括vline的图例。在此版本的ggplot2中,您可以使用show_guide调整图例的出现位置:

ggplot(test, aes(value, fill=cond)) + 
  geom_density(alpha=0.5) + 
  labs(x='Energy', y='Density', fill='Group') + 
  opts(
    panel.background=theme_blank(), 
    panel.grid.major=theme_blank(), 
    panel.grid.minor=theme_blank(), 
    panel.border=theme_blank(), 
    axis.line=theme_segment()
  ) + 
  geom_vline(data=test.cdf, aes(xintercept=value.mean, colour=cond), 
    linetype='dashed', size=1, show_guide = TRUE)

enter image description here

可以重现您的问题。默认值为show_guide = FALSE。在旧版本中,您可以将legend = FALSE添加到geom_vline以省略图例。添加legend = FALSE仍然可以在当前版本中运行,但它会发出警告:

Warning message:
In get(x, envir = this, inherits = inh)(this, ...) :
  "legend" argument in geom_XXX and stat_XXX is deprecated. Use show_guide = TRUE or show_guide = FALSE for display or suppress the guide display.

我建议升级ggplot2