Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用ggplot2在geom_col()图表上方添加数据标签_R_Ggplot2 - Fatal编程技术网

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

R 使用ggplot2在geom_col()图表上方添加数据标签,r,ggplot2,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) 库(ggplot2) gg修改网站上

我尝试添加数据标签,显示给定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)
库(ggplot2)
gg修改网站上的一个示例,我认为您应该能够按照以下思路做一些事情:

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)
库(ggplot2)

df我能够通过使用
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)
库(ggplot2)

m3很快的答案是

+ geom_text(aes(label = Global_Sales), vjust = -0.5)

你有没有找过类似的问题?例如,您的问题看起来非常类似。如果我在一些模拟数据上使用您的代码,标签就在每个条的顶部。也许是我更新了你的软件包,但不幸的是,当我试图复制这些指令时,我没有成功。您提供的链接讨论了在条形图上方放置一个数据标签来表示单个值。但是,我正在尝试为一组值创建一个数据标签。@MartinSchmelzer我今天早上将ggplot2下载到r studio中的家用电脑上,没有软件包需要更新。你介意和我分享一下你所做的吗?刚刚生成了一个data.frame,其中包含
Genre=LETTERS[1:10]
Global\u Sales=round(runif(10100500))
,然后使用了你的代码。有没有办法不让数据标签重复?此外,这些值似乎不正确。Hmm。我也知道我回答的意思是……我可以问‘n’是什么吗?考虑到你展示的代码,我不确定这个传说是从哪里来的。尤其是当代码看起来应该给出正确的结果时。n不应该存在。我想做的是将每种类型的全球总销售额作为标签添加到每一条上。无论出于何种原因,我似乎无法用我的代码来实现这一点。最好共享用于创建此图的
数据。这将有助于今后的工作。@MKR完成。数据来自Kaggle的网站。回答得好。没有其他例子能回答这个问题。您现在可能知道了早期解决方案不起作用的原因
geom_text
要求每个条只有一个值(如果是多个值,则打印所有值)。另一种编写解决方案的方法是
df%%>%groupby(Genre)%%>%summary(Global_Sales=sum(Global_Sales))%%>%ggplot(aes(x=Genre,y=Global_Sales,fill=Genre))+geom_col()+geom_text(aes(label=Global_Sales),position=position_dodge(width=0.9),vjust=-0.25)
。感谢@MKR提供额外的解决方案。我只是在学习R,我一直看到的一件事是
%>%
功能,这对我来说是新的东西。我将对此进行研究并开始实践。对于希望复制列上方数字的任何人,相关行是
geom_text(aes(label=global sales),vjust=-0.5)