如何在多面图中为 geom_vline 设置线型?

How to set linetype for geom_vline in a faceted plot?

下面的代码很有魅力:

foo = data.frame(x=c(1,2,3),
                 y=c(4,5,6),
                 lt=c('dotted', 'dashed', 'dotdash'))
ggplot(foo, aes(x,y)) + geom_point() +
  geom_vline(aes(xintercept=x, linetype=lt))

以下代码删除线型。为什么?

ggplot(foo, aes(x,y)) + geom_point() +
  geom_vline(xintercept=3, aes(linetype=lt)) +
  facet_wrap(~lt)

我在 Rstudio 中使用 ggplot 0.9.3.1。

我可以确认你的问题,而且 Sandy 的评论为我修复了它,在 R 3.1.2 中使用 ggplot2 1.0:

geom_vline(aes(xintercept = 3, linetype = lt))

但是我仍然认为这是 geom_vline(可能只是文档)中的错误。我认为 xintercept 应该被列为默认值为 0 的必需美学。值得注意的是,下面的代码 "works" —— 这些行在默认 x 位置 0:[=20 处具有正确的散列=]

ggplot(foo, aes(x,y)) + 
   geom_point() +
   geom_vline(aes(linetype=lt)) +
   facet_wrap(~lt)

所以问题似乎是,当在 aes() 之外提供所需的美学时,aes() 内的参数将被忽略。这与其他功能不同。例如,

ggplot(foo) + geom_point(x=1, aes(y=y))

给出了一个错误但是

ggplot(foo) + geom_point(aes(x=1, y=y))

没有。就我而言,理想的行为是 geom_vline() 在这方面与 geom_point() 的行为方式相同。