R 直方图ggplot:显示每个类别每个箱子的计数标签

R 直方图ggplot:显示每个类别每个箱子的计数标签,r,ggplot2,R,Ggplot2,我将使用ggplot中的菱形数据集来说明我的观点,我想画一个价格直方图,但我想显示每个切割的每个箱子的计数 这是我的密码 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_cont

我将使用ggplot中的菱形数据集来说明我的观点,我想画一个价格直方图,但我想显示每个切割的每个箱子的计数 这是我的密码

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)
这是我目前的情节

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

如果我能够配置Y轴,而不是在步骤5000显示数字,那么我可以手动配置
ggplot2
2.x的更新,这也是一个额外的点 现在,您可以使用
position=position\u 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
作为
组添加到
stat\u bin
,可以获得
cut
每个值的计数。我还将
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))

上面代码的一个问题是,我希望标签在每个条形部分内垂直居中,但我不确定如何在
stat\u 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)


要在y轴上配置断点,只需添加
scale_y_continuous(breaks=seq(0200002000))
或您想要的任何断点。

现在使用GGPLOT 2.2.0 position_stack选项更容易

library(ggplot2)
s <- ggplot(mpg, aes(manufacturer, fill = class))
s + geom_bar(position = "stack") +  
    theme(axis.text.x = element_text(angle=90, vjust=1)) + 
    geom_text(stat='count', aes(label=..count..), position = position_stack(vjust = 0.5),size=4)
库(ggplot2)

那么你想在每个箱子里挤五个数字?是的,那看起来很漂亮……是的,完全正确:)