R & ggplot2 - как построить относительную частоту категориального разделения двоичной переменной - PullRequest
1 голос
/ 14 апреля 2020

Я могу легко построить график относительной частоты с одной «базовой» категорией вдоль оси x и частотой другого категориального, являющегося y:

library(ggplot2)
ggplot(diamonds) +
  aes(x = cut, fill = color) +
  geom_bar(position = "fill")

Теперь скажем, что эта категориальная переменная разбита на каким-то образом с помощью двоичной переменной:

diamonds <- data.frame(diamonds)
diamonds$binary_dummy <- sample(c(0,1), nrow(diamonds), replace = T)

Как отобразить исходную категориальную диаграмму, но теперь показываю разбивку в переменной цвета ('color'). Предпочтительно это будет представлено двумя разными оттенками исходного цвета.

В основном я пытаюсь воспроизвести этот сюжет: Freq_plot_example

Как видно из легенды, каждая категория делится на "NonSyn" / "Syn" и каждый сплит окрашен в темный / светлый оттенок другого отличного цвета (например, «регуляторные белки NonSyn» = темно-розовый, «регуляторные белки Syn» = светло-розовый).

1 Ответ

2 голосов
/ 14 апреля 2020

Если вы не против вручную установить палитру, вы можете сделать что-то вроде этого:

library(ggplot2)
library(colorspace)

df <- data.frame(diamonds)
df$binary_dummy <- sample(c(0,1), nrow(df), replace = T)

pal <- scales::brewer_pal(palette = "Set1")(nlevels(df$color))
pal <- c(rbind(pal, darken(pal, amount = 0.2)))

ggplot(df, aes(x = cut, fill = interaction(binary_dummy, color))) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = pal)

Создано в 2020-04-14 с помощью представьте пакет (v0.3.0)

РЕДАКТИРОВАТЬ: Чтобы исправить отношения цвета взаимодействия, вы можете установить именованную палитру, например:

pal <- setNames(pal, levels(interaction(df$binary_dummy, df$color)))

# Miss a level
df <- df[!(df$binary_dummy == 0 & df$color == "E"),]

ggplot(df, aes(x = cut, fill = interaction(binary_dummy, color))) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = pal)

В качестве альтернативы, Вы также можете установить разрывы шкалы:

ggplot(df, aes(x = cut, fill = interaction(binary_dummy, color))) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = pal, breaks = levels(interaction(df$binary_dummy, df$color)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...