在基数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)
)