使用stat_summary居中标签

时间:2018-06-21 13:08:05

标签: r ggplot2

我看到很多关于使用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文件)

Current Result

1 个答案:

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