直方图的 x 轴上不需要的空间
Posted
技术标签:
【中文标题】直方图的 x 轴上不需要的空间【英文标题】:unwanted spaces in x-axis of a histogram plot 【发布时间】:2022-01-09 23:02:18 【问题描述】:我想用一系列整数数据创建一个直方图。因此,由于 x 轴的范围很大,我决定对 x 轴使用对数刻度。但是图中的“1”、“2”和“3”数字之间有一个空格。谁能帮我解释原因并告诉我如何删除这些空格?
这是我的代码:
H1 <- as.data.frame(floor(runif(10000, min = 1, max = 100)))
colnames(H1) <- "H"
breaks <- c(1,2,3,4,5,6,7,8,9,10,100,500,1000,max((H1$H)))
ggplot (H1, aes(H)) +
geom_histogram(colour="darkgreen", size=1, fill="green", binwidth = 0.1) +
stat_bin(geom="text", aes(label=..count..) , hjust=-0.4, vjust = 0.4, binwidth = 0.1 , angle = 90, size = 2.5) +
scale_x_log10('Integer Data', breaks = breaks, labels = breaks, expand = expansion(mult = c(0, 0.01))) +
scale_y_continuous('Count', expand = expansion(mult = c(0, 0.1))) +
theme(axis.text.x = element_text(size = 8, angle = 60, vjust = 0.8, hjust=1))
这是输出:
【问题讨论】:
如果您希望 1 和 2 之间的空间不大于 2 和 3 之间的空间,并且 2 和 3 之间的空间不大于 3 和 4 之间的空间,依此类推,也许您没有实际上想要一个对数刻度。这就是根据定义对数刻度的工作方式。您也不会拥有与所有这些整数对齐的 bin。 【参考方案1】:当您对直方图使用对数刻度时,您必须确保每个 bin 中有 合理 数量的元素。
您已使用runif
生成数据,因此分布均匀。这意味着 1 到 10 之间的元素将远少于 10 到 100 之间的元素。
由于您已经修复了一定数量的 breaks
和一定数量的 binwidth
,因此您将得到空垃圾箱。
您可以做的是更改binwidth
或bins
的数量。例如:
ggplot(H1, aes(H)) +
geom_histogram(colour="darkgreen", size=1, fill="green", bins = 10) +
stat_bin(geom="text", aes(label=..count..) , hjust=-0.4, vjust = 0.4, bins = 10 , angle = 90, size = 2.5) +
scale_x_log10('Integer Data', expand = expansion(mult = c(0, 0.01))) +
scale_y_continuous('Count', expand = expansion(mult = c(0, 0.1))) +
theme(axis.text.x = element_text(size = 8, angle = 60, vjust = 0.8, hjust=1))
我删除了 breaks
和 labels
,因为 bin 的中心不再落在整数上。
【讨论】:
以上是关于直方图的 x 轴上不需要的空间的主要内容,如果未能解决你的问题,请参考以下文章