使用stat_summary将标签居中

使用stat_summary将标签居中,r,ggplot2,R,Ggplot2,我看到很多关于如何使用geom_文本进行此操作的帖子,但没有看到如何使用stat_summary进行此操作。我试着在“文本”标签上加上, position=position\u堆栈(0.5),但它只返回“无法显示此视觉” 聚合数据 ag事实上,你得到的比它看起来需要的要复杂得多。我将用mpg数据集的一个子集来说明,而不是下载您的数据集 与在统计摘要\u bin中计算简单摘要不同,您可以在绘图之前自己进行计算(让您控制正在发生的事情),也可以让几何图形栏进行计算geom\u bar类似于geom\

我看到很多关于如何使用geom_文本进行此操作的帖子,但没有看到如何使用stat_summary进行此操作。我试着在“文本”标签上加上, position=position\u堆栈(0.5),但它只返回“无法显示此视觉”

聚合数据
ag事实上,你得到的比它看起来需要的要复杂得多。我将用
mpg
数据集的一个子集来说明,而不是下载您的数据集

与在
统计摘要\u bin
中计算简单摘要不同,您可以在绘图之前自己进行计算(让您控制正在发生的事情),也可以让
几何图形栏
进行计算
geom\u bar
类似于
geom\u col
,只是它在内部运行一个
stat\u count
。如果在
geom_text
中使用相同的统计数据,则可以访问此计算的计数来制作标签。然后使用
position=position\u stack(vjust=0.5)
,而不是简写的
position=“stack”
,将标签居中放置

请注意,
stat(count)
是对
.count..
的替换,它被简称为
calc(count)
。我使用的是github的开发版本;CRAN版本可能仍然是
.count..
符号

库(tidyverse)
df%过滤器(制造商%在%c(“雪佛兰”、“道奇”))
ggplot(df,aes(x=制造商,填充=等级))+
几何钢筋(位置=“堆叠”)+
geom_text(aes(label=stat(count)),stat=“count”,position=position_stack(vjust=0.5))

我喜欢的第二种方法是计算计数,然后将其导入
ggplot
,因为它提供了更多的控制。调用
count
可以:

df%>%
计数(制造商、类别)
#>#tibble:6 x 3
#>制造商类别n
#>              
#>1雪佛兰2seater 5
#>2雪佛兰中型5
#>3雪佛兰suv 9
#>4道奇小型货车11
#>5道奇皮卡19
#>6道奇suv 7
然后,您可以通过管道将其导入简化的
ggplot
调用。这将得到相同的绘图,只是
计数
将被标记为
n

df%>%
计数(制造商、类别)%>%
ggplot(aes(x=制造商,y=n,填充=等级))+
几何坐标(position=“stack”)+
geom_文本(aes(标签=n),位置=position_堆栈(vjust=0.5))

请发布您的数据样本。上面有一个包含数据的链接。“数据集样本”。谢谢最好对数据集的代表性样本调用
dput
,并将结果发布到问题中。使人们无需从单独的源下载即可轻松检索我正在PowerBi内部构建此功能,因此我不确定如何实现此功能。我同意您的“在ggplot2之外聚合”建议。但是你有没有找到一种方法来使用带有摘要函数的
position\u stack()
(我认为
stat(y)
)而不是counts(
stat(count)
)呢?我还没弄明白。我对R很陌生。我知道我必须对标签有一个摘要,因为如果我没有,它会为堆栈中的每一行提供一个标签。这是我想要实现的最终产品:@aosmith Hmmm,不。当我尝试
position=“stack”
内部
stat\u summary
时,我在if中得到
错误(任何(否定)){:缺少需要TRUE/FALSE的值。
。与OP报告的错误不同,但仍然没有fun@RebeccaS这实际上可能是在绘图之前进行总结的一个很好的理由。在
dplyr
中,它将是
count(*)
就像在我的第二种方法中一样,
*
是你需要聚合的任何组。我觉得我越来越接近了。即使在绘图之前对我的值进行了汇总,我现在也可以得到每个条形的多个值。ggplot(数据集,aes(x=PvA,y=Value,fill=Attribute,label=Area\u Totals))+geom\u bar(position=“stack”,stat=“identity”)+geom_text(stat=“identity”,position=position_stack(vjust=0.5))+coord_flip()+facet_grid(Area~)现在导致
library(ggplot2)
ag<- aggregate(dataset$Value, by = list(PvA=dataset$PvA, Area=dataset$Area, Unit=dataset$Unit), FUN=sum)
ag
b<-ggplot(dataset, aes(x=PvA, y=Value, fill=Attribute)) + 
     stat_summary_bin(aes(fill=Attribute), fun.y = sum, geom="bar", position="stack", color="black")+
     stat_summary_bin(aes(label=..y..), fun.y=sum,  geom="text", color = "white", data=subset(dataset, Value >1))
b