如何避免geom_point与geom_bar干扰及3项ggplot样式调整问题
ggplot2 图表样式调整与图层逻辑说明
修改后的完整代码
AG_PROGNOOS <- data.frame( AMETIALAGRUPP = c("Administratiivtöö lihtametnikud","Administratiivtöö lihtametnikud","Administratiivtöö lihtametnikud","Administratiivtöö lihtametnikud"), TOOJOU_LIIKUVUS = c("Tööjõupakkumine","Tööjõupakkumine","Tööjõupakkumine","Tööjõuvajadus"), TUNNUS = c("HOIVEPROGNOOS_10A","PENSION","Hõive muutus + pension","PROGNOOSITUD_LOPETAMISTE_ARV"), INIMEST = c(-990,2570,1580,1690) ) HOIVE <- data.frame( INIMEST = 13348.5 ) ggplot(AG_PROGNOOS, aes(x=TOOJOU_LIIKUVUS, y=INIMEST))+ # 柱状图层:仅在该层指定fill映射,数据源排除目标TUNNUS geom_bar(aes(fill=TUNNUS), position=position_dodge(), stat="identity", width = 0.5, data=subset(AG_PROGNOOS, TUNNUS !="Hõive muutus + pension"))+ # 点图层:仅在该层指定color映射,数据源仅保留目标TUNNUS geom_point(aes(color="Tööjõuvajadus kokku"), data=subset(AG_PROGNOOS, TUNNUS =="Hõive muutus + pension"), size=5, position=position_dodge(width=0.5))+ # 自定义柱状图填充色 scale_fill_manual(values = c("PROGNOOSITUD_LOPETAMISTE_ARV" = "#0071ce", "PENSION" = "#ffd300", "HOIVEPROGNOOS_10A" = "#ff9e16"), name=" ", labels=c("Hõive kasv/kahanemine", "Pensionile minejad", "Koolilõpetajad"))+ # 自定义点颜色(替换#your-custom-color为你的色码) scale_color_manual(values = c("Tööjõuvajadus kokku" = "#your-custom-color"), name = "")+ # 调整图例样式:消除跨图层干扰 guides(fill = guide_legend(override.aes = list(shape = NA)), color = guide_legend(override.aes = list(fill = NA)))+ labs(x="", y="Inimest", title = paste("Hõivatute arv 2021 aastal oli", format(round(HOIVE$INIMEST, 0), big.mark = " ")))+ theme_minimal(base_size = 20)+ theme(plot.title = element_text(hjust = 0.1))+ theme(panel.border = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor = element_blank(), axis.line=element_blank())+ scale_y_continuous(labels=function(x) format(x, big.mark = " ", scientific = FALSE))+ theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust=1))
三个样式问题的解决方法
- 1. 自定义geom_point颜色:添加
scale_color_manual函数,在values参数中指定你的自定义颜色代码,替换示例中的#your-custom-color即可。 - 2. 移除图例中的‘colour’字样:将
scale_color_manual的name参数设为空字符串"",让color图例与fill图例共用同一个空标题,避免单独显示"colour"标题。 - 3. 消除geom_bar图例上的黑色点标记:通过
guides(fill = guide_legend(override.aes = list(shape = NA))),强制将fill图例中的点形状设为无,避免继承point图层的标记样式。
图层逻辑与避免干扰说明
ggplot2采用图层叠加机制:先定义的图层在底层,后添加的图层在上方显示。要避免geom_bar与geom_point互相干扰,核心是做好以下两点:
- 隔离图层映射:不要在全局
aes中定义所有映射,而是将fill映射仅放在geom_bar图层中,color映射仅放在geom_point图层中,避免图层间不必要的映射继承。 - 明确图层数据源:每个图层通过
data参数指定专属的数据集子集,比如柱状图用排除特定TUNNUS的数据,点图用仅包含该TUNNUS的数据,从数据源层面实现隔离。
内容的提问来源于stack exchange,提问作者Picataro
相关产品推荐
相关产品推荐

