гистограмма ggplot (geom_bar) для использования начальной и конечной точек из df

#r #ggplot2

Вопрос:

У меня ниже df , что у меня есть 2 метки, A и B. И я хочу, чтобы гистограмма для A начиналась с 0 до 2, для B-с 3 до 6. Как я могу это сделать? Если df для этого нужно поспорить, это тоже нормально.

 df <- data.frame(labels = c("A", "A", "B", "B"), values = c(0, 2, 3,6))

ggplot(df, aes(x = labels, y = values, fill = labels, colour = labels))   
  geom_bar(stat = "identity")
 

Ответ №1:

Одним из вариантов достижения желаемого результата было бы использование geom_rect , которое включает в себя некоторые споры о данных, чтобы привести данные в правильную форму:

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

df <- data.frame(labels = c("A", "A", "B", "B"), values = c(0, 2, 3, 6))

df <- df %>% 
  group_by(labels) %>% 
  arrange(values) %>% 
  mutate(id = row_number()) %>% 
  ungroup() %>% 
  pivot_wider(names_from = id, values_from = values) %>% 
  rename(ymin = 2, ymax = 3) %>% 
  mutate(xmin = as.numeric(factor(labels)) - .45,
         xmax = as.numeric(factor(labels))   .45)

ggplot(df, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = labels, colour = labels))   
  geom_rect(stat = "identity")  
  scale_x_continuous(breaks = 1:2, labels = c("A", "B"))