Сгруппированная гистограмма на основе диапазона в R

#r #ggplot2 #histogram

Вопрос:

У меня есть набор данных в этом формате, и я хотел бы сделать график сгруппированной гистограммы и с диапазонами, т. Е. 10-20, 20-30, ..., 90-100 .

    group weight
1  A     54
2  A     55
3  B     52
4  B     53
5  C     60
 

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

 ggplot(df, aes(x = weight))  
  geom_histogram(aes(color = gp), fill = "white",
                 position = "identity", bins = 30)  
  scale_color_manual(values = c("red", "blue", 'green'))
 

введите описание изображения здесь

На самом деле мне нужна гистограмма, подобная следующей

введите описание изображения здесь

Ответ №1:

Это гистограмма, а не гистограмма. Вот подход к его воспроизведению:

 library(dplyr)

df %>%
  mutate(weight_class = cut(weight,
                            breaks = seq(20, 60, by = 10))) %>%
  ggplot()  
    geom_bar(aes(x = weight_class, fill = group), position = "dodge")  
    scale_fill_manual(values = c("red", "blue", "green"))

 

Комментарии:

1. Это приводит к следующей ошибке Error in cut(weight, breaks = seq(20, 60, by = 10)) : object 'weight' not found

2. Есть ли у вашего df объекта weight столбец?

3. Да, в нем действительно есть weight колонка. Я выполняю синтаксис в R studio следующим образом df <- mutate(weight_class = cut(weight, breaks = seq(20, 60, by = 10)))

4. Это не сработает. Но ты можешь позвонить df <- mutate(df, weight_class = cut(weight, breaks = seq(20, 60, by = 10)))

5. Спасибо!! Теперь это выглядит хорошо, когда я выполнил следующее df<- mutate(df, weight_class = cut(weight, breaks = seq(20, 70, by = 10))) и ggplot(df) geom_bar(aes(x = weight_class, fill = gp), position = "dodge") scale_fill_manual(values = c("red", "blue", "green"))