Заполнение цветов столбчатой диаграммы с накоплением в соответствии с количеством вместо категории (R / Excel)

#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. Это потрясающе, большое вам спасибо! Только один последний вопрос: возможно ли масштабировать цвета для каждого вопроса вместо общей частоты?