另一个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()
的传奇?
答案 0 :(得分:16)
根据您使用的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)
可以重现您的问题。默认值为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
。