如何修正含双数据集的并列条形图+折线图的配色与变量报错
问题解决:ggplot并列条形图填充色异常+变量未找到报错
核心问题分析
- 条形填充色为灰色:你在
aes()里只指定了colour=count,这个参数控制的是条形的边框颜色,填充色默认是灰色,需要添加fill映射。 object 'count' not found报错:R是大小写敏感的!你的数据集p里定义的是大写的Count,但代码里用了小写的count,变量名不匹配导致报错。- 数据集构造错误:你提供的
p数据集代码里,Year(5个值)、Count(2个值)、Value(11个值)长度不匹配,无法正确生成长格式数据,得先修正这个。
修正后的完整代码
第一步:正确构造数据集
# 构造数据集p:确保每个Year+Count组合对应一个Value(5年×2类型=10个值,修正你提供的Value长度) p <- expand.grid(Year = c(2012,2013,2014,2015,2016), Count = c("type1","type2")) p$Value <- c(1,5,4,9,7,11,19,16,2,14) # 这里取你提供的前10个值,可根据实际数据调整 # 构造数据集q q <- data.frame(Year = c(2012,2013,2014,2015,2016), proportion = c(0.5,0.2,0.4,0.6,0.8))
第二步:修正可视化代码
mycolors <- c("lightsteelblue", "darkgrey", "darkseagreen") # 调整顺序:对应type1、type2、折线 ylim.prim <- c(0, 20) ylim.sec <- c(0, 1) b <- diff(ylim.prim)/diff(ylim.sec) a <- ylim.prim[1] - b*ylim.sec[1] example <- ggplot(data=p, aes(x=Year, y=Value*10000, colour=Count, fill=Count)) + geom_bar(stat="identity", width=.5, position = "dodge")+ geom_line(data=q, aes(y=a+proportion*b), color=mycolors[3], linewidth=1.2)+ scale_y_continuous("Counts, per 10,000 events", sec.axis = sec_axis(~ (. - a)/b, name = "Percent Success")) + scale_x_continuous("Year", breaks=seq(2012,2016, by=1)) + # 修正x轴范围,匹配现有数据 ggtitle("Example figure comparing counts and success rate")+ theme_bw()+ scale_fill_manual(values=mycolors[1:2], labels=c("Type1","Type2"))+ scale_color_manual(values=mycolors, labels=c("Type1","Type2","Proportion"))+ theme(legend.position="bottom") example
关键修正点说明
- 统一变量名:把数据集和代码里的变量名统一为
Count(或全小写count,保持一致即可)。 - 同时映射
colour和fill:在aes()里添加fill=Count,让条形填充色按类型区分。 - 颜色映射对应:调整
mycolors的顺序,让scale_fill_manual对应两个条形类型,scale_color_manual包含折线的颜色,标签也对应正确。 - 修正x轴范围:原代码x轴breaks到2022,但数据只有到2016,避免空轴。
内容的提问来源于stack exchange,提问作者the_mailman
相关产品推荐
相关产品推荐

