如何在 R 中的条形图中显示每个条形图的值(不使用 ggplot)?

How to display the values of every single bar in a barplot in R (without using ggplot)?

我是 R 的初学者,感谢到目前为止提供的帮助,我设法使用下面的代码创建了以下条形图。但是,有一个问题仍然悬而未决,即使阅读了类似问题中提供的所有答案,我仍无法解决它。

代码:

res <- data.frame( aggregate( rentals ~ weatherCond + season, bikes, sum ))

res$weatherCond <- ordered(res$weatherCond,
levels = c(1, 2, 3, 4),
labels = c("Clear", "Fog", "Snow", "Storm"))

res$season <- factor(res$season,
levels = c(1, 2, 3, 4),
labels = c("Winter", "Spring", "Summer", "Autumn"))

par(mar=c(10,4,2,1)+.5) 
barplot(res[,"rentals"], names=apply( res[,1:2], 1, function(x) paste0(x[1],"_",x[2]) ), las=3, main = "Weather and Rentals", ylab = "Rentals", col = c('blue', 'red', 'green', 'grey')[res$weatherCond])

该图根据天气条件(3 个变量)可视化租用自行车数量与季节之间的联系。图中的条形图显示租用的自行车数量,分为相应的 SEASON/WEATHER 组合。

我的问题: 我究竟应该如何修改上面的代码,以便可以显示每个条的值的计数(在条中或在条的顶部)?每个柱状图代表出租数量。

更新: 我设法通过添加以下代码行来显示这些值:

y <- as.matrix(res$rentals)
text(b, y+2, labels=as.character(y)) <!-- the "b" is the barplot -->

然而,结果却是惨不忍睹。有没有办法让它看起来更好?

barplot() returns 每个柱的中点(参见 ?barplot)。这可以与函数 text() 结合使用以显示数字。

如果是你的情况,它将变成:

mid_points <- barplot(res[,"rentals"], ...)
text(x = mid_points, y = res[,"rentals"], text = res[,"rentals"])

可以使用其他参数来修改数字的位置。 由于我没有你的数据,我使用了一个修改过的 base R 示例:

b <- barplot(GNP ~ Year, data = longley, ylim = c(0, 700))
text(
  x = b,
  y = longley$GNP,
  labels = round(longley$GNP, 1),
  pos = 3,
  srt = 90,
  offset = 1.5
)