r - 直方图 ggplot : Show count label for each bin for each category

标签 r ggplot2

我将使用 ggplot 中的钻石数据集来说明我的观点,我想为价格绘制直方图,但我想显示每次切割的每个 bin 的计数
这是我的代码

ggplot(aes(x = price ) , data = diamonds_df) + 
geom_histogram(aes(fill = cut , binwidth = 1500)) +
stat_bin(binwidth= 1500, geom="text", aes(label=..count..) , 
vjust = -1) + 
scale_x_continuous(breaks = seq(0 , max(stores_1_5$Weekly_Sales) , 1500 ) 
, labels = comma)

这是我目前的情节

enter image description here

但是正如您看到的数字显示了每个 bin 上所有切割的计数,我想显示每个 bin 上每个切割的计数。

如果我能够配置 Y 轴而不是在 5000 步时显示数字到其他我可以手动配置的东西,那也是一个加分点

最佳答案

更新 ggplot2 2.x

您现在可以使用 position=position_stack(vjust=0.5) 在堆叠条形中居中标签,而无需预先汇总数据。 .例如:

ggplot(aes(x = price ) , data = diamonds) + 
  geom_histogram(aes(fill=cut), binwidth=1500, colour="grey20", lwd=0.2) +
  stat_bin(binwidth=1500, geom="text", colour="white", size=3.5,
           aes(label=..count.., group=cut), position=position_stack(vjust=0.5)) +
  scale_x_continuous(breaks=seq(0,max(diamonds$price), 1500))

原答案

您可以获得 cut 的每个值的计数通过添加 cut作为 group审美到stat_bin .我也搬家了binwidth aes 之外,这导致了 binwidth在您的原始代码中被忽略:
ggplot(aes(x = price ), data = diamonds) + 
  geom_histogram(aes(fill = cut ), binwidth=1500, colour="grey20", lwd=0.2) +
  stat_bin(binwidth=1500, geom="text", colour="white", size=3.5,
           aes(label=..count.., group=cut, y=0.8*(..count..))) +
  scale_x_continuous(breaks=seq(0,max(diamonds$price), 1500))

enter image description here

上面代码的一个问题是我希望标签在每个条形部分内垂直居中,但我不确定如何在 stat_bin 内做到这一点。 ,或者如果有可能的话。乘以 0.8(或其他)将每个标签移动不同的相对量。因此,为了让标签居中,我在下面的代码中为标签创建了一个单独的数据框:
# Create text labels
dat = diamonds %>% 
  group_by(cut, 
           price=cut(price, seq(0,max(diamonds$price)+1500,1500),
                     labels=seq(0,max(diamonds$price),1500), right=FALSE)) %>%
  summarise(count=n()) %>%
  group_by(price) %>%
  mutate(ypos = cumsum(count) - 0.5*count) %>%
  ungroup() %>%
  mutate(price = as.numeric(as.character(price)) + 750)

ggplot(aes(x = price ) , data = diamonds) + 
  geom_histogram(aes(fill = cut ), binwidth=1500, colour="grey20", lwd=0.2) +
  geom_text(data=dat, aes(label=count, y=ypos), colour="white", size=3.5)

enter image description here

要在 y 轴上配置中断,只需添加 scale_y_continuous(breaks=seq(0,20000,2000))或者任何你想要的休息时间。

关于r - 直方图 ggplot : Show count label for each bin for each category,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057765/

相关文章:

r - 如何使用来自 csv 文件的实际观测值正确注释堆栈条形图?

r - R中的 "standard formula interface to a data.frame"是什么意思?

r - ggplot2:如何在分组条形图上添加线条和 p 值?

r - 测试 Limma 没有变化

r - 如何使用 pROC 的 ggroc 将 AUC 添加到多 ROC 图中

r - Plotly - 用 R 发布我的 plotly

r - 根据R中数据框中第二列的值填充第三列

html - 样式化单个 bsTooltip (shinyBS) 元素

r - fun.y 在 ggplot 中无法识别

r - "for"循环只添加最后的 ggplot 层