r - ggplot2 geom_histogram 的奇怪行为
问题描述
我遇到了一个奇怪的问题,geom_histogram
通过绘制均匀分布可以很容易地看到它。
library(tidyverse)
u <- runif(10000)
ggplot(data = as_tibble(u), aes(x = value)) + geom_histogram()
可以看出它相当不对称,我在某处读到这是因为最左边(和最右边)的 bin 以 0 为中心,并且没有从 -0.5 到 0 生成任何值,从而产生了所见的差异。所以我摆弄了boundary
参数,它让我:
ggplot(data = as_tibble(u), aes(x = value)) + geom_histogram(boundary = 0)
同样的设置boundary = 1
使它在左侧不对称。
我的问题是:解决此行为的首选方法是什么?另外,这个论点究竟做了什么boundary
?从文档中不是很清楚。
谢谢你。
解决方案
据我所知,boundary
指定一个点作为两个垃圾箱之间的分割点。其余的 bin 是根据 bin 的数量或提供的断点设置的。如果提供boundary
的数据超出数据范围,则会根据文档进行一些巧妙的转换。也许通过以下示例可以清楚地知道是什么boundary
。
解决方法
如果您为 x 轴设置限制,则可以规避该问题,尽管这不是一个非常优雅的解决方案。
library(tidyverse)
#> Warning: package 'ggplot2' was built under R version 4.1.0
set.seed(123)
u <- runif(1000)
p1 <- ggplot(data = as_tibble(u), aes(x = value)) + geom_histogram(boundary = 0)
p2 <- ggplot(data = as_tibble(u), aes(x = value)) + geom_histogram(boundary = 0) +
scale_x_continuous(limits = c(0, 1))
cowplot::plot_grid(p1, p2, nrow = 2)
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
边界示例
在第三个图 (p3) 中,boundary
设置为 0.5,您可以看到两个 bin 在 0.5 处精确拆分。在 0.75 点处的第四个图也是如此。Boundary 可能不是它所做工作的最佳名称,但基本上指出给定数字应该是两个 bin 之间的边界。
u <- runif(10)
p3 <- ggplot(data = as_tibble(u), aes(x = value)) +
geom_histogram(bins = 22, boundary = .5, binwidth = 0.1) +
scale_x_continuous(limits = c(0, 1))
p4 <- ggplot(data = as_tibble(u), aes(x = value)) +
geom_histogram(bins = 22, boundary = .75, binwidth = 0.1) +
scale_x_continuous(limits = c(0, 1))
cowplot::plot_grid(p3, p4, nrow = 2)
#> Warning: Removed 2 rows containing missing values (geom_bar).
由reprex 包于 2021-06-13 创建 (v2.0.0 )
推荐阅读
- c# - 为什么 MongoDB.Driver Indexes.CreateOne 无法创建索引并出现错误“命令 createIndexes failed”?
- r - 测试正态性并显示数据框中多列的组合结果 (R)
- asp.net-web-api - ASP.NET Web API 管道中的 Serilog 自定义丰富器
- javascript - 如何修复 Safari 12 中的“加载资源失败:无法解码原始数据”
- java - ChartJS“无法获取未定义或空引用的属性'getTime'”
- java - CommonsMultipartFile - 类型不匹配
- javascript - 使用 JS 随机化 RGB 颜色
- python - 从 python sqlalchemy 调用 Hana 存储过程时出错
- batch-file - 从桌面启动位于文件夹内的批处理文件
- python - 为什么输出字符串周围有三组双引号