使用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
相关产品推荐
相关产品推荐

