我希望在下图中的每个方面都有一个独特的abline。
library(dplyr)
library(ggplot2)
ggplot(mpg, aes(x = hwy, y = displ, group = 1)) +
geom_point() +
geom_line() +
facet_wrap(~ manufacturer, scales = "free")
abline只是一条水平线,等于每个方面上的'second to last'
y值(displ)。例如,奥迪方面的倒数第二个y值为2.0,而雪佛兰方面的倒数第二个y值为3.5。最大的问题是我不知道如何通过facet对我的数据进行子集化(假设这是我应该采取的方法)。我假设FrankenSyntax将是:
geom_hline(data = subset(mpg, displ = DEPENDS ON FACET),
aes(yintercept = lead(mpg, FACET, 2nd to Last) & lag(mpg, FACET, 2nd to Last)),
color = "red"
)
我也不知道在这种情况下如何实现lead()
和lag()
以提取倒数第二个值,以用作我的abline y-intercept。我知道必须有更好的方法来解决这个问题。
答案 0 :(得分:2)
您可以实现计算mpg %>% arrange(hwy) %>% group_by(manufacturer) %>% mutate(icpet=nth(displ,-2))
拦截值。
library(dplyr)
library(ggplot2)
ggplot(mpg %>% arrange(hwy) %>% group_by(manufacturer) %>%
mutate(icpet=nth(displ,-2)),
aes(x = hwy, y = displ, group = 1)) +
geom_point() +
geom_line() +
facet_wrap(~ manufacturer, scales = "free") +
geom_hline(aes(yintercept=icpet), colour="blue", lwd=2)
上述代码也可以写成:
mpg %>% arrange(hwy) %>% group_by(manufacturer) %>%
mutate(icpet=nth(displ,-2)) %>%
ggplot(aes(x = hwy, y = displ, group = 1)) +
geom_point() +
geom_line() +
facet_wrap(~ manufacturer, scales = "free") +
geom_hline(aes(yintercept=icpet), colour="blue", lwd=2)
答案 1 :(得分:0)
library(dplyr)
library(ggplot2)
ggplot(mpg %>%
arrange(hwy) %>%
group_by(manufacturer) %>%
mutate(ref.pt = nth(displ, -2)),
aes(x = hwy, y = displ, group = 1)) +
geom_point() +
geom_line() +
facet_wrap(~ manufacturer, scales = "free") +
geom_hline(aes(yintercept = ref.pt), color = "red")