根据计数而不是类别R / Excel填充堆积的条形图的颜色

问题描述

我想创建一个堆积的条形图,但我希望根据计数确定颜色。例如,如果我有5条,每条都有3个类别,则为条形图着色的方法是按类别。 (例如,类别1为红色,类别2为蓝色,类别3为绿色)。但是,我想要的是:如果对于栏1,类别1具有最高的计数,那将是红色。同样,如果对于栏2,类别3具有最高的计数,我希望第二个栏的类别3被涂成红色。有什么办法可以做到吗?我可以使用R / Excel / Numbers /其他任何软件。

这是我目前拥有的,我希望颜色由频率决定(几乎像热图)

解决方法

这在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"))

enter image description here


编辑

从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","red"))

enter image description here


编辑

OP的进一步请求...

ggplot(data = data,x = Frequency)) + 
  geom_col(aes(fill = Question,alpha = Frequency)) +
  geom_text(aes(label = stringr::str_wrap(Response,position = position_stack(vjust = 0.5)) +
  scale_fill_manual(values = c("deepskyblue4","forestgreen","orange","red"),name = "Question") +
  scale_alpha_continuous(guide = "none") +
  theme_minimal() +
  theme(panel.grid = element_blank())

enter image description here

reprex package(v0.3.0)于2020-08-14创建