删除ggplot中的图层图例

Has*_*ntm 9 r legend ggplot2

另一个ggplot传奇问题!

我有一个表格的数据集

test <- data.frame(
  cond = factor(rep(c("A", "B"), each=200)), 
  value = c(rnorm(200), rnorm(200, mean=0.8))
)
Run Code Online (Sandbox Code Playgroud)

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

test.cdf <- ddply(test, .(cond), summarise, value.mean=mean(value))
Run Code Online (Sandbox Code Playgroud)

然后在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)
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*tra 17

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

在此输入图像描述

其中不包括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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这再现了你的问题.默认,show_guide = FALSE.在旧版本中,您可以添加legend = FALSEgeom_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.
Run Code Online (Sandbox Code Playgroud)

我建议升级ggplot2.

  • 从 ggplot 2.0.0 开始:“show_guide”已被弃用。请改用“show.legend”。 (4认同)