【问题标题】:Bar chart reverses direction with log transformed axis条形图使用对数转换轴反转方向
【发布时间】:2014-06-24 19:07:12
【问题描述】:

我想在 ggplot 中创建一个条形图,其中所有条形图在对数转换的 Y 轴上从零上升到它们的高度。但是,ggplot 将 Y 轴“归零”为 1,然后在 0 和 1 之间的任何值现在都用向下延伸的条形表示,即使它们仍然是正值。下面是生成附图和错误输出的代码:

data <- data.frame(matrix(c(1990, 2000, 2010, 15, 3, .5),ncol=2))
names(data) <- c("x","y")
ggplot(data, aes(x=x, y=y)) + geom_bar(stat="identity") + scale_y_log10() + annotation_logticks()

警告信息: 当 ymin != 0 时,堆叠没有很好的定义

我希望该图能生成一个更类似于此的图表,其中所有条形都向上。

ggplot(data, aes(x=x, y=10*y)) + geom_bar(stat="identity") + scale_y_log10() + annotation_logticks()

【问题讨论】:

  • 您可以为您的数据添加 +1 ,data &lt;- data.frame(matrix(c(1990, 2000, 2010, 15, 3, .5)+1,ncol=2))
  • 是什么让您认为 0.5 的值将具有高于 1 的记录值?

标签: r ggplot2


【解决方案1】:

geom_bar 底部硬编码为 0,因此看起来不容易更改。您可以尝试的其他方法是自己绘制矩形。由于我们没有使用条形图,因此我们将确保 year 变量是时间因素。所以如果我们的样本数据是

data <- data.frame(
    x=factor(c(1990, 2000, 2010)),
    y=c( 15, 3, .5)
)

然后我们可以用它来绘制它

ggplot(data) + 
   geom_rect(aes(xmax=as.numeric(x)+.4, xmin=as.numeric(x)-.4, 
       ymax=y, ymin=0)) + 
   scale_y_log10()+
   scale_x_discrete( breaks=levels(data$x), expand=c(0,.5), 
       limits=levels(data$x)) + 
   annotation_logticks(sides="l")

产生

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2018-02-08
    相关资源
    最近更新 更多