#r #excel #charts #bar-chart #stacked-chart
#r #excel #Диаграммы #столбчатая диаграмма #диаграмма с накоплением
Вопрос:
Я хочу создать столбчатую диаграмму с накоплением, но я хочу, чтобы цвета определялись на основе количества. Например, если у меня есть 5 столбцов, и каждый столбец имеет 3 категории, способ раскрашивания столбчатой диаграммы по умолчанию — по категориям. (например, категория 1 — красная, категория 2 — синяя и категория 3 -зеленая). Однако я хочу вот чего: если для столбца 1 категория 1 имеет наибольшее количество, это было бы красным. Аналогично, если для столбца 2 категория 3 имеет наибольшее количество, я бы хотел, чтобы категория 3 второго столбца была окрашена в красный цвет. Есть ли у меня какой-либо способ сделать это? Я могу использовать R / Excel / Numbers / любое другое программное обеспечение.
Это то, что у меня есть в настоящее время, и я хочу, чтобы цвет определялся частотой (почти как тепловая карта)
Ответ №1:
В R. Это просто.
Если у нас есть некоторые данные, подобные этому:
set.seed(69)
df <- data.frame(category = sample(LETTERS, 200, TRUE))
Мы можем сделать:
library(ggplot2)
ggplot(df, aes(x = category))
geom_bar(aes(fill = ..count..), color = "black")
scale_fill_gradientn(colours = c("forestgreen", "gold", "red"))
Редактировать
Из дополнительной информации OP кажется, что данные выглядят примерно так:
set.seed(69)
data <- data.frame(Question = rep(LETTERS[1:5], each = 5),
Response = rep(c("Strongly disagree", "Disagree", "Neutral",
"Agree", "Strongly agree"), 5),
Frequency = as.vector(replicate(5, {
x <- sample(10:30, 5, TRUE); x / sum(x)})))
В этом случае мы могли бы сделать что-то вроде этого:
ggplot(data = data, aes(y = Question, x = Frequency))
geom_col(aes(fill = Frequency))
geom_text(aes(label = stringr::str_wrap(Response, 10)),
position = position_stack(vjust = 0.5))
scale_fill_gradientn(colours = c("forestgreen", "gold", "red"))
Редактировать
Дополнительный запрос от OP…
ggplot(data = data, aes(y = Question, x = Frequency))
geom_col(aes(fill = Question, alpha = Frequency))
geom_text(aes(label = stringr::str_wrap(Response, 10)),
position = position_stack(vjust = 0.5))
scale_fill_manual(values = c("deepskyblue4", "forestgreen", "gold",
"orange", "red"),
name = "Question")
scale_alpha_continuous(guide = "none")
theme_minimal()
theme(panel.grid = element_blank())
Создано 2020-08-14 пакетом reprex (версия 0.3.0)
Комментарии:
1. Будет ли это также работать с столбчатой диаграммой с накоплением? Потому что прямо сейчас у меня есть следующий код:
ggplot() geom_bar(aes(y = Question, x = Frequency, fill = Response), data = data, stat="identity")
. Поскольку я уже использую заливку для раскрашивания категорий, могу ли я использовать две заливки?. Я обновил вопрос, включив в него изображение того, что у меня есть в настоящее время2. @KartikShah смотрите мои обновления. Я также добавил текстовые метки, но их можно удалить, удалив
geom_text
вызов3. Это потрясающе, большое вам спасибо! Только один последний вопрос: возможно ли масштабировать цвета для каждого вопроса вместо общей частоты?