如何去除堆叠条形图两类边框线:色块间白线与图例黑框
问题描述
需要去除堆叠条形图中的两类边框线:
- 堆叠颜色块之间的白色分隔线
- 图例中颜色框外围的黑色边框
解决方案
只需对原代码做两处关键调整即可实现需求:
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
相关产品推荐
相关产品推荐

