0

下面的代码就像一个魅力:

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。

4

1 回答 1

2

我可以确认您的问题,并且桑迪的评论为我解决了这个问题,在 R 3.1.2 中使用 ggplot2 1.0:

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

但是我仍然认为这是一个错误(也许只是文档)geom_vline。我认为xintercept应该将其列为必需的美学,默认值为 0。值得注意的是,下面的代码“有效”——这些行在默认的 x 位置 0 处具有正确的散列:

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()

于 2015-03-31T00:26:59.277 回答