我有一些整数数据,我想在数值范围内绘制它们的频率。我可以绘制直方图,但图中的条形图像连续数据一样放在一起。我希望条形图之间留有空间,以反映数据是离散的。我尝试了各种方法来实现这一点,但都不太成功。
在我看来,这应该发生在开箱即用的情况下,我觉得我一定错过了一些基本的东西,比如我使用了错误的geom
或者我不知道我需要的参数。
这里有一些数据和我的第一次绘图尝试。直方图的数据箱,但它看起来连续。
library(dplyr)
library(ggplot2)
home_runs_df <- data.frame(home_runs = c(48, 40, 38, 37, 37, 37, 37, 37, 36, 36,
35, 34, 34, 34, 33, 33, 33, 33, 33, 33,
33, 32, 32, 32, 32, 32, 31, 31, 29, 29,
29, 29, 28, 28, 27, 27, 27, 27, 27, 26))
# Histogram bins, but plots like continuous.
home_runs_df %>%
ggplot(mapping = aes(x = home_runs)) +
geom_histogram(bins = 6)
我试着设置条宽,但是它被弃用了,消息建议使用geom_bar()
,尽管我就是这么用的!我想stat = "bin"
最终会在幕后调用geom_histogram()
而不是geom_bar()
。
home_runs_df %>%
ggplot(mapping = aes(x = home_runs)) +
geom_bar(stat = "bin", bins = 6, width = 0.5)
这允许我更改宽度,但我如何收集数据?
home_runs_df %>%
ggplot(mapping = aes(x = home_runs)) +
geom_bar(stat = "count", width = 0.75)
我可以自己绑定数据,但我讨厌这样做,我希望ggplot
为我做这件事,但这些结果并不完全是我想要的。
- 我缺少零高度的箱子(41,45)。
- 另一方面,我确实喜欢x轴标 checkout 现的位置,并且知道如何设置所需的文本。
home_runs_df %>%
mutate(bin = cut(home_runs, breaks = c(seq(25, 48, by = 4), Inf))) %>%
ggplot(mapping = aes(x = bin)) +
geom_histogram(stat = "count")
我从ggplot
参考文档中得到了这个方法。使用geom_bar()
和scale_x_binned()
。
- 条形图的外观与离散数据的外观相同(条形图之间有空格)。
- 我不喜欢条柱之间刻度线的显示方式,好像数据是连续的。
home_runs_df %>%
ggplot(aes(home_runs)) +
geom_bar() +
scale_x_binned(n.breaks = 6)
我敢打赌,有一些棘手的方法可以把标签移到我想要的位置。这种程度的定制是必要的吗?我想我试图做的是相当传统的。我错过了什么?
我想要的是:
- 分组离散、整数数据。
- 在仓中绘制频率。
- 将整数数据视为离散数据而不是连续数据,每个组正下方的条形和标签之间有空格。
2条答案
按热度按时间ws51t4hk1#
根据对您想要实现的目标的描述,我认为使用
geom_bar
并使用ggplot2::cut_interval
或ggplot2::cut_width
进行装箱将是同时拥有带填充和离散刻度的条形图的方法。注:我还添加了一个
scale_x_discrete(drop = FALSE)
,以防您也想显示没有观测值的间期。h22fl7wq2#
我认为您可以使用您的
cut
技巧,但要正确设置cut
函数中的labels
参数:因此,每列都以所选条柱为中心,并且使用连续比例,如果需要,可以使用
scale_x_continuous
按需重新调整比例