ggplot2条形图:为整体及各因子添加轮廓(适配stat="identity"、position="fill")
解决方案
要实现只保留条形图整体外轮廓和各因子类别(species)的黑色轮廓、去掉内部观测分隔线的效果,你可以通过分层绘制条形的方式适配stat="identity"和position="fill"参数:
步骤1:数据预处理
简化数据处理流程,直接用count汇总分组数据:
library(tidyverse) # 清理并汇总数据 mydf <- starwars |> drop_na(gender, species) |> count(gender, species)
步骤2:分层绘制图表
通过两层geom_col(等价于geom_bar(stat="identity"))实现需求:
- 第一层绘制无填充、仅黑色外边框的条形,作为整体轮廓;
- 第二层绘制带填充、无内部线条的条形,展示各因子占比:
ggplot(mydf, aes(x = gender, y = n, fill = species)) + # 绘制整体外轮廓:无填充,黑色边框,宽度与后续条形一致 geom_col(position = "fill", fill = NA, color = "black", width = 0.4, linewidth = 1) + # 绘制填充色块:无内部线条,宽度与轮廓层一致 geom_col(position = "fill", color = NA, width = 0.4) + # 可选:将y轴转为百分比格式 scale_y_continuous(labels = scales::percent) + theme_classic()
效果说明
- 外层无填充条形会生成每个
gender对应的整体黑色边框; - 内层填充条形没有内部线条,不会出现原代码中堆叠块之间的黑色分隔线;
- 每个因子类别(species)的色块外边缘与外层轮廓重合,自然呈现出类别的黑色轮廓效果。
内容的提问来源于stack exchange,提问作者Spock
相关产品推荐
相关产品推荐

