#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"))