Рядом графики geom_bar 2 разных столбцов - PullRequest
1 голос
/ 18 апреля 2020

так что я получил 2 участка, которые прекрасно работают сами по себе. Я пытаюсь показать их рядом друг с другом, полосы рядом друг с другом, насколько это возможно, но это просто не получается. Попытка сравнить прошлые и текущие расходы на питание примерно 600 человек.

  ggplot(data=survey,aes(x=Past.FoodExp))+
  geom_bar()+
  geom_text(stat ='count',aes(label =..count.., vjust = -0.2))
  ggplot(data=survey,aes(x=Current.FoodExp))+
  geom_bar()+
  geom_text(stat ='count',aes(label =..count.., vjust = -0.2))

Это то, что я пытался , но это не дало мне желаемого результата.

ggplot(data=survey, aes(y=Past.foodExp, x=Current.FoodExp)) + 
    geom_bar(position="dodge", stat="identity")

Как видите, он показывает мои диапазоны по осям x и y, и мне нужно только по x, тогда как y - общее количество людей, которых я опрошенных. У кого-нибудь из вас есть идея, как go обойти это и правильно представить? Спасибо.


Воспроизводимый пример

dput (head (survey, 10))

structure(list(Past.FoodExp = structure(c(2L, 1L, 3L, 4L, 3L, 
4L, 3L, 4L, 3L, 3L), .Label = c("0-100\x80", "101-200\x80", "201-300\x80", 
"300\x80+"), class = "factor"), Current.FoodExp = structure(c(2L, 
2L, 4L, 4L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("0-100\x80", 
"101-200\x80", "201-300\x80", "300\x80+"), class = "factor")), row.names = c(NA, 
10L), class = "data.frame")

1 Ответ

0 голосов
/ 18 апреля 2020

Вам необходимо преобразовать ваш фрейм данных в более длинный формат. Вы можете использовать функцию pivot_longer, например:

library(tidyr)
library(dplyr)

survey %>% pivot_longer(everything(), names_to = "var", values_to = "val")

# A tibble: 20 x 2
   var             val          
   <chr>           <fct>        
 1 Past.FoodExp    "101-200\x80"
 2 Current.FoodExp "101-200\x80"
 3 Past.FoodExp    "0-100\x80"  
 4 Current.FoodExp "101-200\x80"
 5 Past.FoodExp    "201-300\x80"
 6 Current.FoodExp "300\x80+"   
 7 Past.FoodExp    "300\x80+"   
 8 Current.FoodExp "300\x80+"   
 9 Past.FoodExp    "201-300\x80"
10 Current.FoodExp "201-300\x80"
11 Past.FoodExp    "300\x80+"   
12 Current.FoodExp "201-300\x80"
13 Past.FoodExp    "201-300\x80"
14 Current.FoodExp "300\x80+"   
15 Past.FoodExp    "300\x80+"   
16 Current.FoodExp "300\x80+"   
17 Past.FoodExp    "201-300\x80"
18 Current.FoodExp "300\x80+"   
19 Past.FoodExp    "201-300\x80"
20 Current.FoodExp "300\x80+" 

Итак, с этой структурой вы можете легко передать ее в ggplot2 следующим образом:

library(tidyr)
library(dplyr)
library(ggplot2)

survey %>% pivot_longer(everything(), names_to = "var", values_to = "val") %>%
  ggplot(aes(x = val, fill = var))+
  geom_bar(position = position_dodge())+
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.2, position = position_dodge(0.9))

enter image description here

Это отвечает на ваш вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...