Является ли поведение 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 ? геометрия

Ответы на вопрос(1)

Ваш ответ на вопрос