【问题标题】:How do I set ggplot2 binwidth in geom_histogram when using scale_x_log10?使用 scale_x_log10 时如何在 geom_histogram 中设置 ggplot2 binwidth?
【发布时间】:2021-03-21 06:08:20
【问题描述】:

在使用 scale_x_log10 时在 geom_histogram 中设置 ggplot2 binwidth 会产生奇怪的直方图。

我想在没有找到解决方法here 的情况下调整 binwidth。

我不想使用解决方法的一个原因是我不喜欢它;似乎应该有一个更好的方法内置到 ggplot 中。另一个原因是当我在我的数据集上尝试它时它不起作用。

我正在使用 facet_wrap,因此解决方案需要使用它,但我正在使用的示例代码被精简到最低限度。

当我允许默认 binwidth 时,我得到一个不错的直方图:

library(ggplot2)
data(diamonds)
ggplot(data=diamonds, aes(x=price/carat)) +
  geom_histogram() +
  scale_x_log10()# +
  # facet_wrap(~cut, ncol=1, scales='free_y')

但是,当我设置 binwidth 时,无论 binwidth 是多少,我都会得到一个填充整个图形(或单个 bin?)的均匀分布(除非 binwidth=1,这会产生看起来像两个 bin 或双峰的情况均匀分布?):

ggplot(data=diamonds, aes(x=price/carat)) +
  geom_histogram(binwidth=10) +
  scale_x_log10()# +
  # facet_wrap(~cut, ncol=1, scales='free_y')

设置中断会产生相同的实心方块和新的中断。设置限制清除图表。

在 ggplot() 中设置 binwidth 本身会使图形与默认 binwidths 保持不变,大概是因为 geom_histogram 覆盖了它。而且,scale_x_log10 不接受 binwidth。

在使用 scale_x_continuous 而不是 scale_x_log10 时可以设置 binwidth。

【问题讨论】:

    标签: r ggplot2 histogram


    【解决方案1】:

    尝试输入总宽度的一小部分,使 binwidth 与 bin 的数量相关,例如 1/(n_bins - 1)

    library(ggplot2)
    
    data(diamonds)
    ggplot(data=diamonds, aes(x=price/carat)) +
      geom_histogram(binwidth = 1/50) +
      scale_x_log10()
    

    【讨论】:

    • 完美!谢谢!
    • 但是,我想知道为什么会这样。怎么了?它怎么知道我们的意思是设置相对于比例的 binwidth,而不是字面上的 0.02?
    • 而且,为什么不设置恒定的 binwidth,使像素宽度随比例减小?
    • geom_histogramgeom_bar 加上stat_bin 的别名。我认为在这种情况下它使用stat_bin 来解释binwidth 参数。 stat_binbinwidth 的描述:默认为数据范围的 1/30。因此,您正在根据数据范围设置 binwidth。我不确定为什么它似乎没有使用您数据的绝对规模。也许因为它是一个转换的比例,所以它只是将范围默认为 1。不完全确定。
    猜你喜欢
    • 2018-06-10
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多