R中的ggplot:带有对数刻度标签错位的条形图

时间:2015-08-13 17:37:15

标签: r ggplot2 bar-chart

所以我有一个条形图,由于数据范围,保证y轴的对数图。所以问题是我的值为0.5,其中log10为-0.3。 由于条形变为负,因此用于放置标签的条形“顶部”实际上是“底部”,因此我的文本标签位于底部的“正上方”,这意味着在条形图的中间。 我想我可能不是第一个遇到这个问题的人,但是搜索相关的修复程序并没有帮助。最值得注意的是,我尝试使用道奇,但这并没有改变栏的“顶部”真的是“底部”。

所以有两个问题:

  1. 我可以修复此标签事故吗?
  2. 这只是丑陋:我可以将x轴移动到y = 1,以便在不移动x轴标签的情况下为负值提供更多上下文吗?
  3. alpha=c('A','B','C','D')
    value=c(0.5,10,40,1100)
    table<-as.data.frame(alpha)
    table<-cbind(table, value)
    library(ggplot2) 
    graph <- ggplot(table, aes(x=alpha)) + 
      geom_bar(stat="identity",aes(y=value),width=0.5) + 
      geom_text(aes(y=value,label=value),vjust=-0.5) + 
      scale_y_continuous(trans="log10",limits=c(0.5,1400))
    graph + theme_classic()
    

    graph with labels incorrect

1 个答案:

答案 0 :(得分:4)

修改数据标签的y坐标的一个小技巧(如果值小于1,则使用ifelse()y的值设置为1。至于轴,只需隐藏X轴(将其设置为element_blank())并绘制一条新的水平线:

graph <- ggplot(table, aes(x=alpha)) + 
  geom_bar(stat="identity",aes(y=value),width=0.5) + 
  # Modify the placing of the label using 'ifelse()':
  geom_text(aes(y=ifelse(value < 1, 1, value),label=value),vjust=-0.5) + 
  scale_y_continuous(trans="log10",limits=c(0.5,1400)) + 
  theme_classic() +
  # Hide the X axis:
  theme(axis.line.x = element_blank()) +
  # Draw the new axis
  geom_hline()
print(graph)

输出:

Output for code above