Вычисляемые переменные в ggridges

Вот MWE:

library(ggplot2)
library(ggridges)

ggplot(iris, aes(x=Sepal.Length, y=Species, fill=..x..)) +
geom_density_ridges_gradient()

Мой вопрос: можем ли мы сказать fill = Sepal.Length?

Я понимаю, что ..x.. относится к вычисляемой переменной x, и вызов geom_density_ridges_gradient, вероятно, не увидит переменную в терминологии ggplot, но во время заклинания ggplot мы МОЖЕМ ссылаться на Sepal.Length, не так ли?

Может кто-нибудь пояснить, почему в этом случае нужно говорить ..x.., а не Sepal.Length? Я не совсем уверен в рассуждениях здесь.

Если быть более точным, почему это не работает:

ggplot(iris, aes(x=Sepal.Length, y=Species, 
fill=Sepal.Length)) +  geom_density_ridges_gradient()

‹------------ Я хотел бы перефразировать свой запрос, начиная здесь ------------>

If I do :

ggplot(iris, aes(x = Sepal.Length, y = Species)) + 
geom_density_ridges_gradient(fill = Sepal.Length)

geom_de density_ridges_gradient не сможет найти переменную Sepal.Length и выдает ошибку.

Итак, правильное заклинание должно быть:

ggplot(iris, aes(x = Sepal.Length, y = Species)) + 
geom_density_ridges_gradient(fill = ..x..)

geom_de density_ridges_gradient должен быть в состоянии найти вычисленную переменную ..x .., но это НЕ работает. Может кто-нибудь объяснить, почему это так?

Другой запрос:

If I do :

ggplot(iris, aes(x = Sepal.Length, y = Species,fill = Sepal.Length)) + 
geom_density_ridges_gradient()

Почему он не выдает мне сообщение об ошибке, в котором говорится, что Sepal.Length не найден,
он просто игнорирует аргумент заполнения и выводит результат, почему это?

В конце концов, похоже, что работает следующее:

ggplot(iris, aes(x=Sepal.Length, y=Species, fill=..x..)) +
geom_density_ridges_gradient()

но я не уверен, почему это работает.

В основном я не понимаю, где должен быть размещен аргумент, соответствующий заливке.


person user2338823    schedule 07.05.2018    source источник


Ответы (1)


Я думаю, что здесь может быть то, что Sepal.Length не является категорией.

Имея это в виду, могу ли я предположить, что это то, что вам нужно? (Если нет, дайте мне знать, и я постараюсь ответить, что вам нужно.)

library(tidyverse)
library(ggridges)

ggplot(
  data = iris, 
  aes(x=Sepal.Length, y=Species, fill=Species)
  ) + 
  geom_ridgeline(
    stat = "binline", 
    bins = 20, 
    draw_baseline = FALSE
  )

Запуск этого кода генерирует эту диаграмму:

ggridges-chart

Однако, если вы хотите сгруппировать по Sepal.Length, как вы предлагаете, вы можете добавить следующее (из здесь):

ggplot(
  data = iris, 
  aes(x=Sepal.Length, y=Species, fill=Species, group=Sepal.Length)
  ) + 
  geom_ridgeline(
    stat = "binline", 
    bins = 20, 
    draw_baseline = FALSE
  )

... Что сгенерирует следующее:

ggridges-group-chart

person p0bs    schedule 07.05.2018