【问题标题】:How to suppress zeroes when using geom_histogram with scale_y_log10将 geom_histogram 与 scale_y_log10 一起使用时如何抑制零
【发布时间】:2014-05-29 19:31:25
【问题描述】:

我正在尝试使用 ggplot、geom_histogram 和 scale_y_log10 绘制具有 log y 比例的直方图。大多数区域(计数大于 1 的区域)显示正确:背景是透明的,直方图条用默认颜色黑色填充。但是在计数为 1 时,颜色会反转:黑色背景和直方图条的透明填充。此代码(如下)在图中生成示例。

谁能解释一下造成这种情况的原因?我了解对数刻度带来的问题,但我似乎无法找到解决方案。我希望有一个简单的解决方法,或者我忽略了一些东西。

set.seed(1)
df <- data.frame(E=sample(runif(100), 20, TRUE))
ggplot(df,aes(E)) + geom_histogram(binwidth=0.1) + scale_y_log10(limits=c(0.1,100)) + xlim(0,1)

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以将drop=TRUE 添加到geom_histogram 调用以丢弃计数为零的垃圾箱(有关详细信息,请参阅?stat_bin):

    set.seed(1)
    df <- data.frame(E=sample(runif(100), 20, TRUE))
    ggplot(df,aes(E)) + 
      geom_histogram(binwidth=0.1, drop=TRUE) + 
      scale_y_log10(limits=c(0.1,100)) + 
      xlim(0,1)
    

    编辑:由于比例从 1 开始,因此不可能显示高度为 1 的条形图。正如 this answer 中提到的,您可以选择从不同的级别开始,但这可能会产生误导。无论如何,这是代码:

    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))
    }
    
    ggplot(df,aes(E)) + 
      geom_histogram(binwidth=0.1, drop=TRUE) + 
      scale_y_continuous(trans = mylog_trans(base=10, from=-1), limits=c(0.1,100)) +
      xlim(0,1)
    

    【讨论】:

    • 感谢您的快速回答。我希望有这样一个简单的解决方案,但不幸的是它不能正常工作。当黑色区域消失(零)时,应该出现 1 的地方不会。低于 1 的所有内容都将被删除。
    • 目前,geom_histogram 表示:“drop 已弃用。请改用pad。”但是pad=TRUE 不会做同样的事情。
    • @Ruud 我也有同样的问题,即 ggplot2 告诉我“请改用 pad”,但它并没有像 drop 那样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多