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

R语言Plotly动态柱状图排序时保持固定标准颜色显示异常求助

问题解决方法

你遇到的颜色错位问题核心是没有将颜色和Var1的类别做固定绑定,仅按数据行顺序传递颜色,当数据排序变化后行顺序改变,颜色就会和对应类别错位。按如下修改代码即可实现无论数据怎么排序,每个Var1类别对应的颜色固定不变:

library(plotly)
Var1<-c("Hospitalized","Not hospitalized","Unknown")
Freq<-c(52475,66129,43955)
hos<-data.frame(Var1,Freq)

hos$Perc<-round((hos$Freq / sum(hos$Freq))*100, 1)
# 先定义固定的颜色映射:把类别和颜色一一绑定,和数据顺序无关
color_map <- c(
  "Not hospitalized" = "#60ab3d",
  "Hospitalized" = "#3e5b84",
  "Unknown" = "#028c75"
)
# 要把数值最大的项排在顶部,把order的decreasing参数改为TRUE即可
hos$Var1 <- factor(hos$Var1, levels = unique(hos$Var1)[order(hos$Freq, decreasing = F)])

fig1 <- plot_ly(hos , x = ~Perc, y = ~Var1,
                type = 'bar', orientation = 'h',
                color = ~Var1, # 明确按Var1类别映射颜色
                colors = color_map # 传入预定义的固定颜色映射
) 

fig1

关键修改点说明

  • 提前定义命名的颜色映射向量,键为Var1的类别值,值为对应颜色,不管数据怎么排序,类别和颜色的绑定关系不会变
  • 去掉了原来逻辑存在错误的for循环赋值颜色列的步骤,不需要额外存储颜色列,直接通过映射关系自动匹配
  • plot_ly中指定color = ~Var1明确按类别匹配颜色,传入预定义的color_map作为颜色池
    如果要在Shiny中动态排序,只需要修改Var1因子的levels顺序,不需要调整颜色相关代码,每个类别永远显示对应固定颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:54:00