Как нанести частоту двухсимвольных переменных на один барплот с наложением прозрачности - PullRequest
0 голосов
/ 09 мая 2018

У меня есть два больших фрейма данных с многочисленными столбцами символа класса и / или фактора. Мне нужно сравнить частоту значений, которые они принимают в первом и втором кадрах данных, перекрывая частоту каждой пары переменных на одном и том же столбчатом графике. Я хотел бы иметь возможность построить график или пропорцию.

Я могу построить каждый отдельно.

ds1 <- data.frame(var1 = as.character(c("7","10","11","4", "7","10","11","4"))) 
ds2 <- data.frame(var2 = c("4","4","7","7", "7","10","11","4"))
ggplot(ds1, aes(var1)) + geom_bar()
ggplot(ds2, aes(var2)) + geom_bar()

Но я изо всех сил пытаюсь:

  1. соедините их вместе
  2. добавить прозрачность, чтобы обе пары полос были видны
  3. пропорция участка вместо числа

1 Ответ

0 голосов
/ 10 мая 2018

Вот способ сделать это с помощью полос, сделанных полупрозрачными и наложенными. Я думаю, что может быть немного яснее поставить столбики рядом друг с другом, и если вы предпочитаете, измените строку position_identity() на position_dodge():

library(ggplot2)
ds1 <- data.frame(var1 = as.character(c("7","10","11","4", "7","10","11","4"))) 
ds2 <- data.frame(var2 = c("4","4","7","7", "7","10","11","4"))

plot.df <- cbind(ds1, ds2)
plot.df <- reshape2::melt(plot.df, id.vars = NULL)

ggplot(plot.df, aes(value, group=variable, fill=variable)) + 
  geom_bar(position = position_identity(), 
           aes(y = ..prop..), 
           alpha=.6,
           color='black')+
  theme_minimal() + ggtitle("Comparing the Frequency of Categories")

Редактировать: Для случая, когда ваши data.frames имеют разную длину:

ds1$variable <- "ds1"
ds2$variable <- "ds2"

names(ds1) <- names(ds2)

plot.df <- rbind(ds1, ds2)

, а затем составьте график отсюда.

Создано в 2018-05-10 пакетом Представ (v0.2.0).

...