Является ли поведение geom_vline несовместимым с поведением других геом ggplot?
Это похоже наgeom_vline
не ведет себя "должным образом" с эстетикой цвета по сравнению с другимиggplot
геометрия. Я пытаюсь выяснить, неправильно ли я что-тоgeom_vline
или это упущение в дизайнеgeom_vline
.
# Fake data for illustration
dat=data.frame(x=rnorm(60), y=rep(LETTERS[1:3],20))
Все эти работы, как и ожидалось:
# Density plot of x with vertical median line
ggplot(data=dat) +
geom_density(aes(x=x)) +
geom_vline(aes(xintercept=median(x)))
# Density plot of exp(x) with vertical median line
ggplot(data=dat) +
geom_density(aes(x=exp(x))) +
geom_vline(aes(xintercept=median(exp(x))))
# Separate density plots of exp(x) for each level of y
ggplot(data=dat) +
geom_density(aes(x=exp(x), colour=y))
Тем не менее, графики ниже работают по-другому. Я ожидал второгоgeom_vline
утверждение на графиках ниже, чтобы включить отдельную срединную линию для каждого уровняy
, Но на самом деле это просто добавляет одну строку в медиане всех значенийx
(как показывает тот факт, что он делает то же самое, что и первыйgeom_vline
заявление).
# Separate density plots of x for each level of y
ggplot(data=dat) +
geom_density(aes(x=x, colour=y)) +
geom_vline(aes(xintercept=median(x)), lwd=4, colour="black") +
geom_vline(aes(xintercept=median(x), colour=y), lwd=1)
# Density plot of x, faceted by level of y
ggplot(data=dat) +
geom_density(aes(x=x, colour=y)) +
geom_vline(aes(xintercept=median(x)), lwd=4, colour="black") +
geom_vline(aes(xintercept=median(x), colour=y), lwd=1) +
facet_grid(. ~ y)
Это похоже наgeom_vline
ведет себя иначе, чем можно было бы ожидать от обычногоggplot
логика. Например, как показано выше, я могу передать функцию данных,exp(x)
, чтобыgeom_density
и он возвращает отдельные графики плотности для каждого уровняy
когда цветовая эстетика включена. Кроме того, пока нет эстетики цвета, я могу передать функцию данных,exp(x)
или жеmedian(exp(x))
, чтобыgeom_vline
и это также ведет себя как ожидалось. Но когда я пытаюсь использовать цвет или эстетикуgeom_vline
, он не может обеспечить отдельные срединные линии для каждого уровняcolour
переменная, вместо этого добавив одну строку для медианы по всемx
ценности.
Я знаю, что могу передать предварительно обобщенные данныеgeom_vline
чтобы получить поведение, которое я хочу (на самом деле, отвечаяэтот ТАК вопрос это то, что подняло вопросы, обсуждаемые здесь), но я пытаюсь понять, есть ли на самом деле несоответствие в поведенииgeom_vline
по отношению к другимggplot
геометрия.
Я что-то упустил илиgeom_vline
действительно ведет себя иначе, чем другиеggplot
? геометрия