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

使用ggplot的..prop..绘制比例条形图时,如何设置填充色?

解决ggplot条形图填充色不生效的问题

嘿,我来帮你搞定这个颜色不生效的问题,大概率是下面两个原因之一:

  • violation变量类型不对
    如果你的violation是数值型变量(比如1、2、3这种),ggplot会把它当成连续变量处理,这时候你用scale_fill_manual是不会起作用的,它还是会用默认的连续色阶。解决起来很简单,把这个变量转成因子或者字符型就行:

    # 方法1:提前处理数据
    Visual2_Data$violation <- as.factor(Visual2_Data$violation)
    
    # 方法2:直接在映射里转换
    aes(x = violation, y = ..prop.., group = 1, fill = as.factor(violation))
    
  • 颜色数量和类别数不匹配
    先检查下violation到底有多少个不同的类别,用levels(Visual2_Data$violation)(如果是因子)或者unique(Visual2_Data$violation)看看。如果你设置的6种颜色和实际类别数不对应,ggplot可能会出现异常(比如类别数多于6个的话,它会循环使用颜色,但如果是变量类型错了就完全不会用你设置的颜色)。

另外顺便提一句:如果你想让每个分面(不同driver_race)里的条形比例是该分面内的占比,那group参数应该设为driver_race而不是1,不然所有分面的比例都是基于整个数据集的,可能不是你想要的效果。

修改后的完整代码示例:

# 先处理变量类型(如果需要)
Visual2_Data$violation <- as.factor(Visual2_Data$violation)

v2 <- ggplot(data = Visual2_Data, 
             mapping = aes(x = violation, 
                           y = ..prop.., 
                           group = driver_race, # 按分面分组计算比例
                           fill = violation)) + 
  geom_bar(stat = "count") + # 明确指定统计类型,避免歧义
  facet_grid(~driver_race) + 
  scale_fill_manual(values = c("red", "green", "yellow", "blue", "pink", "purple")) +
  theme(axis.text.x = element_text(angle=90))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:07:04