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

如何去除堆叠条形图两类边框线:色块间白线与图例黑框

问题描述

需要去除堆叠条形图中的两类边框线:

  • 堆叠颜色块之间的白色分隔线
  • 图例中颜色框外围的黑色边框
解决方案

只需对原代码做两处关键调整即可实现需求:

1. 消除堆叠块间的白色分隔线

在barplot函数中添加space=0参数,彻底消除堆叠颜色块之间的间距,同时保留border=FALSE以确保块本身无边框,这样就能去掉原本的白色分隔线。

2. 移除图例颜色框的黑色边框

原代码中legend函数的border=FALSE参数已经正确设置,该参数会直接去掉图例中颜色填充框的黑色边框,配合bty='n'已移除图例的整体外框,无需额外修改。

修改后完整代码

# 绘制堆叠条形图
colors <- c("grey60", "mediumseagreen")
xFun <- function(x) x/2 + c(0, cumsum(x)[-length(x)])
par(mar=c(1, 15, 9, 5) + 0.1)  # 设置边距以容纳长国家名称标签
byc <- barplot(as.matrix(counts), horiz=TRUE, col=colors, 
               border=FALSE, las=1, xaxt='n', main="各国正在开展的工作类型", 
               ylim=range(0, 9), xlim=range(0, 100), 
               width=1, space=0)  # space=0消除堆叠块间间距

# 添加百分比标签
labs <- data.frame(x=as.vector(sapply(counts, xFun)),  # 计算标签居中位置
                   y=rep(byc, each=nrow(counts)),  # 匹配条形图的y轴位置
                   labels=as.vector(apply(counts, 1:2, paste0, "%")), 
                   stringsAsFactors=FALSE)
labs$labels[labs$labels %in% paste0(0:(5*100)/100, "%")] <- "" # 隐藏占比小于5%的标签

invisible(sapply(seq(nrow(labs)), function(x)  # 避免控制台输出冗余信息
  text(x=labs[x, 1:2], labels=labs[x, 3], cex=.9, font=2, col=0)))

# 添加图例
legend(5, 10.7,  legend=c("表现性工作", "生产性工作"),                                                                                                                              
       fill=colors, horiz=TRUE, bty='n', xpd=TRUE, border=FALSE)

数据

counts <- structure(list(`South Korea` = c(28, 72), `United States` = c(28, 
72), Germany = c(29, 71), `United Kingdom` = c(30, 70), France = c(31, 
69), Singapore = c(36, 64), Japan = c(37, 63), India = c(43, 
57)), class = "data.frame", row.names = c(NA, -2L))

内容的提问来源于stack exchange,提问作者Data and AI Nerd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:01:22