【问题标题】:Force bars to start from a lower value than 0 in ggplot geom_bar in R强制条从 R 中 ggplot geom_bar 中低于 0 的值开始
【发布时间】:2014-03-10 08:28:01
【问题描述】:

我想使用 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,较短的条将无法正常显示。

【问题讨论】:

  • 由于某些 y 值变为负数 - 例如 - log10(0.1) 为 -1,因此您会得到不同方向的条形图。
  • 只是一个快速的想法 - 您是否考虑过转换您的数据,例如添加一个常数,以便您的最小值为 1 并记录它们将从 0 开始的条形图?
  • Didzis 我明白这个事实。 Sarunas 这是个好主意,但标签仍将保持不变。如果有其他解决方案,我可能会等待一段时间。如果我没有得到任何,我可能会这样做。无论如何,谢谢!

标签: r ggplot2 geom-bar


【解决方案1】:

您可以定义自己的比例,而不是使用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

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

【讨论】:

  • 谢谢影子。看来它可以满足我的要求。但这些酒吧具有误导性。在这种情况下,绘制这些值可能是一个更好的主意。我会玩弄它的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
相关资源
最近更新 更多