使用ggplot2

时间:2018-04-08 13:29:56

标签: 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)

这是我得到的结果:enter image description here

我想将标签放在每个条形图上方,并仅显示给定x的所有y值的总和。我该如何做到这一点?

编辑:我试图使用上面提到的一些指南,结果如下:

enter image description here

因此标签似乎相互重叠并报告各个Global_Sales总和。有没有办法按类型报告Global_Sales总数作为标签?

3 个答案:

答案 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)

enter image description here

修改:数据可在此处找到: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)