使用ggplot2在geom_col()图表上方添加数据标签

A.G*_*.G. 5 r ggplot2

我试图添加数据标签以显示给定x类别的y值的总和。这是我使用的代码:

library(ggplot2)
gg <- ggplot(vgsales, aes(x = Genre, y = Global_Sales, fill = Genre)) + 
geom_col() + 
geom_text(aes(x = Genre, y = Global_Sales, label = Global_Sales), stat = "sum")
print(gg)
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果: 在此处输入图片说明

我想将标签放置在每个条上方,并仅显示给定x的所有y值的总和。我该如何完成?

编辑:我试图使用提到的一些指南,结果是这样的:

在此处输入图片说明

因此,标签似乎相互重叠,并且报告了各个Global_Sales总和。有没有一种方法可以仅将流派的Global_Sales报告为标签?

A.G*_*.G. 9

通过使用该aggregate函数从现有数据框架中创建另一个数据框架,我能够找到解决方案。结果是:

library(ggplot2)
m3 <- aggregate(vgsales$Global_Sales, by=list(Genre=vgsales$Genre), FUN = sum)
m3 <- as.data.frame(m3)
names(m3) <- c("Genre", "Global_Sales")
gg <- ggplot(m3, aes(x = Genre, y = Global_Sales, fill = Genre)) + 
geom_col() +
geom_text(aes(label = Global_Sales), vjust = -0.5)
print(gg)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

编辑:数据可以在这里找到:视频游戏销售(通过Kaggle)

  • 好答案。没有其他例子可以回答这个问题。您现在可能知道之前的解决方案不起作用的原因。`geom_text` 预计每个条只有 1 个值(如果有多个值,则打印全部)。另一种编写解决方案的方法可以是 `df %&gt;% group_by(Genre) %&gt;% summarise(Global_Sales = sum(Global_Sales)) %&gt;% ggplot(aes(x = Genre, y=Global_Sales, fill=Genre)) + geom_col()+ geom_text(aes(标签= Global_Sales),位置=position_dodge(宽度= 0.9),vjust = -0.25)`。 (3认同)

use*_*745 6

非常快速的答案是

+ geom_text(aes(label = Global_Sales), vjust = -0.5)
Run Code Online (Sandbox Code Playgroud)


小智 5

修改此网站的示例,我认为您应该能够执行以下操作:

library(ggplot2)

df <- data.frame( x = factor(c(1, 1, 2, 2)), y = c(1, 3, 2, 1), grp = c("a", "b", "a", "b"))

ggplot(data = df, aes(x, y, group = grp)) +
geom_col(aes(fill = grp), position = "dodge") + 
geom_text(aes(label = mean(y), y = y + 0.05), position = position_dodge(0.9), vjust = 0)
Run Code Online (Sandbox Code Playgroud)

所以,基本上,只需使 label=mean(Global_Sales) 即可。将 y 定位为 Global_Sales+0.05 会使其略高于条形图,以便清晰可见。 这是我制作的剧情。希望该链接有效。