我尝试添加数据标签,显示给定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)
我想将标签放在每个条形图上方,并仅显示给定x的所有y值的总和。我该如何做到这一点?
编辑:我试图使用上面提到的一些指南,结果如下:
因此标签似乎相互重叠并报告各个Global_Sales总和。有没有办法按类型报告Global_Sales总数作为标签?
答案 0 :(得分:3)
我能够通过使用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)
修改:数据可在此处找到:Video Game Sales (via Kaggle)
答案 1 :(得分:1)
修改this网站上的示例,我认为您应该可以按照以下方式执行操作:
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)
所以,基本上,只需制作label = mean(Global_Sales)。将y定位为Global_Sales + 0.05将使其略微超过条形,因此它清晰可辨。 This is the plot I made. Hopefully the link works.
答案 2 :(得分:0)
最快速的答案是
+ geom_text(aes(label = Global_Sales), vjust = -0.5)