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

如何在R语言堆叠柱状图中添加并自动生成标签

垂直柱状图年份显示与数据标签修复方案

你需要将水平柱状图改为垂直版本,并实现年份显示和数据标签自动生成,以下是修正后的代码及说明:

counts <- structure(list( 
  A = c(201,70), 
  B = c(191,66),
  C = c(197,69),
  D = c(206,73),
  E = c(207,73), 
  F = c(212,75),
  G = c(207,70)),
  .Names = c("2016", "2017", "2018", "2019", "2020", "2021", "2022"),
  class = "data.frame", 
  row.names = c(NA, -2L))

print(counts)

# 绘图参数设置
colors <- c("paleturquoise3","sienna3")
# 计算垂直堆叠子柱的中心y坐标
yFun <- function(x) x/2 + c(0, cumsum(x)[-length(x)])
par(mar=c(5, 4, 4, 2) + 0.1)  # 调整底部边距容纳年份标签

# 绘制垂直堆叠柱状图,byc保存柱子的x坐标位置
byc <- barplot(as.matrix(counts), horiz=FALSE, col=colors,
               border=FALSE, las=1, main="Mean Time Loss by Companies due to Data Breaches",
               ylim = c(0, 300), width = 1,
               xlab = "年份")

# 添加x轴年份标签
axis(1, at = byc, labels = colnames(counts), cex.axis=0.9)

# 生成数据标签的坐标和内容
labs <- data.frame(
  x = rep(byc, each=nrow(counts)),  # 每个分组的x坐标
  y = as.vector(sapply(counts, yFun)),  # 每个子柱的中心y坐标
  labels = as.vector(t(counts)),  # 提取所有数据值作为标签
  stringsAsFactors=FALSE
)

# 添加数据标签到图中
invisible(sapply(seq(nrow(labs)), function(i) {
  text(x=labs$x[i], y=labs$y[i], labels=labs$labels[i], 
       cex=.8, font=2, col="white")
}))

# 添加图例
legend("top", legend=c("Mean time to identify (days)","Mean time to contain (days)"),
       fill=colors, horiz = TRUE, bty='n', border = FALSE)

关键修改说明:

  • 年份显示修复:移除xaxt='n'限制,用axis()在x轴对应柱子位置添加年份标签,同时调整底部边距确保标签完整显示。
  • 数据标签位置修正:垂直柱状图坐标逻辑与水平图相反,重新编写yFun计算子柱的中心y坐标,x坐标复用柱子的位置byc。
  • 标签提取优化:通过转置数据提取标签,修正原代码的语法错误,将标签设为白色,确保在有色柱子上清晰可见。
  • 边距与参数调整:修改mar参数适配垂直图布局,移除无效的xlim设置。

内容的提问来源于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.03 09:00:43