在基数R中,可以自动使用Freedman—Diaconis规则来设置直方图中的bin宽度:

hist(rnorm(100), breaks = "FD")

基本ggplot中似乎没有这种行为.我一直在try 实现这个方法,以便更容易地使用geom_histogram.

我希望能够修改该函数,以便它可以调用而不指定原始的子框架和列.

bin_number <- function(data_vector = NULL) {

    if (is.null(data_vector)) {
        data_vector <- # something
    }

    bin_width <-
        2 * stats::IQR(data_vector) / (length(data_vector) ^ (1 / 3))
    number_bins <- ceiling(diff(range(data_vector)) / bin_width)

    return(number_bins)
}


df <- data.frame(xval = rnorm(100))

ggplot(data = df) +
    geom_histogram(
        mapping = aes(
            x = xval,
            y = after_stat(density)
        ),
        bins = bin_number()
    )

我已经看过ggplot文档,但是我还没有找到一种方法来轻松地获得当前rabrame的美学.

我当前的方法需要直接调用数据向量,这确实有效,但可能会很笨重,并且使直方图的代码更难复制.

bin_number <- function(data_vector) {

    bin_width <-
        2 * stats::IQR(data_vector) / (length(data_vector) ^ (1 / 3))
    number_bins <- ceiling(diff(range(data_vector)) / bin_width)

    return(number_bins)
}


df <- data.frame(xval = rnorm(100))

ggplot(data = df) +
    geom_histogram(
        mapping = aes(
            x = xval,
            y = after_stat(density)
        ),
        bins = bin_number(df$xval)
    )

推荐答案

如果你用两个步骤创建情节,你肯定可以从审美对象中检索x审美.一种 Select 是先创建美学对象,然后生成情节并从aes对象中检索x美学:

my_aes<-aes(
  x = xval,
  y = after_stat(density)
)
ggplot(data = df) +
  geom_histogram(mapping=my_aes, 
                 bins=bin_number(df[,as_label(my_aes$x)]))

另一个选项是在ggplot()中映射美学,并在添加geom_history图层时再次检索x美学(您也可以从ggplot对象检索数据):

p<-ggplot(data=df, aes(x=xval, y=after_stat(density)))
p+geom_histogram(bins=bin_number(p$data[,as_label(p$mapping$x)]))

R相关问答推荐

保存shiny 的代码嗅探器:避免$ Symbol问题

geom_raster不适用于x比例中超过2,15的值

通过绘图 Select 线串几何体并为其着色

在R中创建一个包含转换和转换之间的时间的列

汇总数据表中两个特定列条目的值

以相同的方式对每个表进行排序

从R中发出的咕噜声中的BUG?

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

在ggplot2上从多个数据框创建复杂的自定义图形

根据r中另一个文本列中给定的范围对各列求和

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

以任意顺序提取具有多个可能匹配项的组匹配项

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

计算多变量的加权和

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

如何将图例文本添加到图例符号中

R中从因数到数字的转换

在不带max()的data.table中按组查找最后一个元素

打印的.txt文件,将值显示为&Quot;Num&Quot;而不是值

用逗号拆分字符串,并删除一些字符