используя третью переменную в качестве заливки aesthethi c в geom_histogram - PullRequest
0 голосов
/ 04 мая 2020

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


ggplot(mtcars, aes(x = mpg, fill = hp)) + 
  geom_histogram(aes(y = (..count..)/sum(..count..)), binwidth = 2) +
  scale_y_continuous(label = function(x) paste0(round(x *100), "%")) +
  labs(x = "miles per gallon",
       y = "percentage of cars",
       fill = "horsepower") +
  theme(legend.position = c(.8, .8)) +
  scale_fill_continuous()

enter image description here

с использованием дискретной шкалы с преобразованной в коэффициент переменной работает:

ggplot(mtcars, aes(x = mpg, fill = factor(hp))) + 
  geom_histogram(aes(y = (..count..)/sum(..count..)), binwidth = 2) +
  scale_y_continuous(label = function(x) paste0(round(x *100), "%")) +
  labs(x = "miles per gallon",
       y = "percentage of cars",
       fill = "horsepower") +
  theme(legend.position = c(.8, .8)) +
  scale_fill_discrete()

enter image description here

Мы ясно видим, что это добавляет информацию. А именно, что HP кажется обратно связанным с MPG.

Это именно то, чего я хотел бы достичь.

Кто-нибудь может объяснить это поведение и как его избежать?

1 Ответ

0 голосов
/ 04 мая 2020

Мне не совсем понятен вопрос, но график выглядит так, как он есть, потому что вы смотрите на HP как на фактор, когда он на самом деле является числовой c переменной.

Обычно гистограмма используется для отображения информации об одной переменной, а не двух. В этом случае вас интересует взаимосвязь между двумя переменными, поэтому более подходящим может быть другой график Есть ли причина, по которой вы не хотели использовать диаграмму рассеяния, чтобы показать эти отношения? Диаграммы рассеяния обычно лучше для сравнения двух числовых c переменных.

Я думаю, что это показывает то же самое (т. Е. HP и MPG обратно пропорциональны) немного яснее.

ggplot(mtcars, aes(x = mpg, y = hp)) +
  geom_point()

enter image description here

...