如何在R语言Likert包中为每个类别条形设置单独颜色?
问题描述
我创建了如下数据框:
library(likert) library(ggplot2) library(dplyr) DF<-data.frame(A=c(1,2,3,4,5),B=c(2,3,4,5,1),C=c(3,1,2,4,5),D=c(2,3,4,5,1),E=c(1,2,4,3,5)) categories<-c("A","B","C","D","E")
将观测值转换为有序因子,并使用likert包创建likert对象:
DF <- DF %>% mutate(across(all_of(categories), ~ ordered(., levels = c(1,2,3,4,5),labels = c(1,2,3,4,5)))) likert_data<-likert(DF)
随后使用该包的likert.plot函数生成了图表:
plot(likert_data,plot.percent.neutral=F,center=3.5)

我希望根据类别(A、B、C、D、E)为每个条形设置不同颜色,达到类似下图的效果:
图例无需完全一致,我知晓如何修改图表整体颜色,但不知如何单独设置每个条形的颜色,恳请提供解决方案。
解决方案
likert包的绘图基于ggplot2实现,我们可以获取默认生成的ggplot对象,修改图层的颜色映射规则来实现按类别设置条形颜色:
- 先生成默认绘图对象(不直接打印):
p <- plot(likert_data, plot.percent.neutral = FALSE, center = 3.5)
- 调整颜色映射,将填充色和边框色绑定到类别(
Item列),并自定义每个类别的颜色:
p <- p + aes(fill = Item, color = Item) + scale_fill_manual(values = c( "A" = "#FF6B6B", "B" = "#4ECDC4", "C" = "#45B7D1", "D" = "#96CEB4", "E" = "#FFEAA7" )) + scale_color_manual(values = c( "A" = "#FF6B6B", "B" = "#4ECDC4", "C" = "#45B7D1", "D" = "#96CEB4", "E" = "#FFEAA7" ))
- 可选:调整图例标题
p <- p + labs(fill = "类别", color = "类别")
- 打印最终图表:
print(p)
说明
- 你可以替换
values中的颜色值,支持R内置颜色名或十六进制颜色码。 - 修改后每个类别的所有响应分段会统一使用该类别的颜色,匹配你需要的效果。
内容的提问来源于stack exchange,提问作者maplesyrup123
相关产品推荐
相关产品推荐

