条形图通过对数转换轴反转方向

时间:2014-06-24 19:07:13

标签: r ggplot2

我想在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时,堆栈没有很好地定义

enter image description here

我更喜欢这个数字会产生一个更类似于此的图形,其中所有条形都是向上的。

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

enter image description here

1 个答案:

答案 0 :(得分:0)

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")

产生

enter image description here