1

我想使用 ggplot 绘制条形图。我使用 scale_y_log10 重新缩放 y 轴。使用下面的脚本时,我得到两个方向(向上和向下)的条形,并且条形从 1 开始。我知道这是因为 log10(1)=0。

ggplot (data=dat, aes(x=Col2,y=Col4,fill=Col3,group=Col1))+
geom_bar(stat="identity")+ facet_grid(.~Col1,scales="free_x",space="fixed")+
ylab("")+xlab("")+scale_fill_discrete("")+
scale_y_log10("#Counts",breaks=c(.1,1,10,100,1000),expand=c(0,0))+
theme_bw()+
theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1))

现在,我想强制条形从较低的值(例如 0.1 或 0.01)开始,并使所有条形向上。我怎样才能做到这一点?试图找到相关的帖子和​​信息,但没有运气。如果已经有这样的信息,有人可以指导我吗?

编辑:我想使用 scale_y_log10 因为大多数条形图都很低,有些非常高。如果我使用 scale_y_continuous,较短的条形将无法正确显示。

4

1 回答 1

5

您可以定义自己的比例,而不是使用scale_y_continuous(trans="log10")). 在下面的示例中,您必须将参数更改from=-2为您的具体示例。

# defining example data (since I don't have your data)
data(mtcars)
mtcars <- rbind(mtcars, mtcars)
mtcars <- rbind(mtcars, mtcars)
mtcars <- rbind(mtcars, mtcars)
mtcars <- rbind(mtcars, mtcars)
mtcars[1, "cyl"] <- 2
# sample plot
c <- ggplot(mtcars, aes(factor(cyl))) + geom_bar()
c + scale_y_log10() # this starts from 1
# defining the scale change
require(scales)
mylog_trans <- function(base=exp(1), from=0) 
{
  trans <- function(x) log(x, base)-from
  inv <- function(x) base^(x+from)
  trans_new("mylog", trans, inv, log_breaks(base=base), 
            domain = c(base^from, Inf))
}
# 
c + scale_y_continuous(trans = mylog_trans(base=10, from=-2)) # starts from 1e-2 
c + scale_y_continuous(trans = mylog_trans(base=10, from=-5)) # starts from 1e-5

正如您在上面的示例中所看到的,该图可能非常具有误导性。这两个图显示相同的数据,但看起来非常不同,因此在使用此比例更改时要小心。

于 2014-03-10T11:00:08.320 回答