You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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对象,修改图层的颜色映射规则来实现按类别设置条形颜色:

  1. 先生成默认绘图对象(不直接打印):
p <- plot(likert_data, plot.percent.neutral = FALSE, center = 3.5)
  1. 调整颜色映射,将填充色和边框色绑定到类别(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"
  ))
  1. 可选:调整图例标题
p <- p + labs(fill = "类别", color = "类别")
  1. 打印最终图表:
print(p)

说明

  • 你可以替换values中的颜色值,支持R内置颜色名或十六进制颜色码。
  • 修改后每个类别的所有响应分段会统一使用该类别的颜色,匹配你需要的效果。

内容的提问来源于stack exchange,提问作者maplesyrup123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:30:47