带有注释的geom_bar,其中的条形与x轴对齐

时间:2014-07-15 08:58:57

标签: r ggplot2

我尝试使用geom_bar创建结果直方图,并希望将结果计数作为文本包含在与x轴对齐的每个条形图中。

这是我到目前为止所做的:

df <- data.frame(results = rnorm(100000))

require(ggplot2)

p = ggplot(df, aes(x =  results)) 

p = p + geom_bar(binwidth = 0.5, colour = "black", fill = "white", drop = T)

p = p + scale_y_log10()

p = p + geom_hline(aes(yintercept = 1))

p = p + stat_bin(geom = "text", binwidth = 0.5,
             aes(x = results, angle = 90, y = 2, 
                 label = gsub(" ", "",format(..count.., big.mark = ",", 
                                             scientific=F)))) 

p

enter image description here

正如您所看到的那样,文本未与x轴对齐,而且我的真实数据要大得多(大约数百万),这个问题会稍微恶化:

当前数字: enter image description here

所需数字: enter image description here

注意:通过在stat_bin中设置y = 3,我会收到一条警告,说明&#34;将变量映射到y并使用stat =&#34; bin&#34;。等...&#34;但我不确定如何在不定义y值的情况下强制文本的位置位于图形的底部。

1 个答案:

答案 0 :(得分:5)

您可以通过交换geomstat来完成此操作。换句话说,请使用geom_text(stat="bin", ...)

这允许您明确设置y位置(即aes之外),并指定与hjust=0的文字对齐。

试试这个:

ggplot(df, aes(x =  results)) +
  geom_bar(binwidth = 0.5, colour = "black", fill = "white", drop = T) +
  scale_y_log10() +
  geom_hline(aes(yintercept = 1)) +
  geom_text(stat="bin", binwidth = 0.5, y=0.1, hjust=0,
           aes(x = results, angle = 90, 
               label = gsub(" ", "", format(..count.., big.mark = ",", 
                                            scientific=F)))) 

enter image description here