我们在教室环境中使用点图来介绍直方图,因为分组概念让许多学生感到困惑。所以我们从相似但更直观的dotplot开始:
x <- rnorm(100)
qplot(x, geom = "bar")
qplot(x, geom = "dotplot", method="histodot")
因为学生在他们自己的数据上做这个,所以代码需要工作而不需要手动调整。但是,geom_dotplot
似乎使用了与geom_bar
不同的缩放默认值。 y轴不随数据调整,但似乎仅取决于点的大小。例如:
x <- runif(1000)
qplot(x, geom = "bar")
qplot(x, geom = "dotplot", method="histodot")
如何geom_dotplot
使用stat_histodot
缩放y轴,就像使用较小或重叠的点一样缩放直方图?
答案 0 :(得分:3)
我提出了以下解决方法,缩小了binwidth,直到页面上的内容适合:
# This function calculates a default binwidth that will work better
# for the dotplot with large n than the ggplot2 default.
calculate_smart_binwidth <- function(x, aspect_ratio = 2/3){
x <- as.numeric(x)
nbins <- max(30, round(sqrt(length(x)) / aspect_ratio))
range <- range(x, na.rm = TRUE, finite = TRUE)
if(diff(range) == 0) return(NULL)
repeat {
message("trying nbins: ", nbins)
binwidth <- diff(range)/nbins;
highest_bin <- max(ggplot2:::bin(x, binwidth = binwidth)$count);
if(highest_bin < aspect_ratio * nbins) return(binwidth)
nbins <- ceiling(nbins * 1.03);
}
}
示例:
x <- runif(1e4)
qplot(x, geom="dotplot", binwidth=calculate_smart_binwidth(x))
x <- rnorm(1e4)
qplot(x, geom="dotplot", binwidth=calculate_smart_binwidth(x))