如何在多面图中为 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()
的行为方式相同。
下面的代码很有魅力:
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()
的行为方式相同。