我看到很多关于使用geom_text做到这一点的文章,但是没有关于如何使用stat_summary做到这一点的文章。我尝试添加到“文本”标签上, position = position_stack(0.5),但它仅返回“无法显示此视觉效果”。
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
Dataset Sample(链接至Dropbox下载,txt文件)
答案 0 :(得分:0)
实际上,您所拥有的比看起来所需的要复杂得多。我将举例说明mpg
数据集的一部分,而不是下载您的数据集。
除了在stat_summary_bin
中计算简单的摘要之外,您可以在绘制之前自己进行操作(可以控制发生的事情),也可以让geom_bar
执行。 geom_bar
类似于geom_col
,但它在内部运行stat_count
。如果您在geom_text
中使用相同的统计信息,则可以访问此计算出的计数以创建标签。然后,使用position = "stack"
代替速记position = position_stack(vjust = 0.5)
来使标签居中。
请注意,stat(count)
是..count..
的简称,calc(count)
的简称。我正在使用github的dev版本; CRAN版本可能仍然是..count..
表示法。
library(tidyverse)
df <- mpg %>% filter(manufacturer %in% c("chevrolet", "dodge"))
ggplot(df, aes(x = manufacturer, fill = class)) +
geom_bar(position = "stack") +
geom_text(aes(label = stat(count)), stat = "count", position = position_stack(vjust = 0.5))
第二种方法(我的偏好是因为它提供了更多控制权)是计算计数,然后将其通过管道传输到ggplot
中。呼叫count
可以使您:
df %>%
count(manufacturer, class)
#> # A tibble: 6 x 3
#> manufacturer class n
#> <chr> <chr> <int>
#> 1 chevrolet 2seater 5
#> 2 chevrolet midsize 5
#> 3 chevrolet suv 9
#> 4 dodge minivan 11
#> 5 dodge pickup 19
#> 6 dodge suv 7
然后,您可以将其传送到简化的ggplot
调用中。除了count
被标记为n
之外,这得到了相同的图。
df %>%
count(manufacturer, class) %>%
ggplot(aes(x = manufacturer, y = n, fill = class)) +
geom_col(position = "stack") +
geom_text(aes(label = n), position = position_stack(vjust = 0.5))