【问题标题】:align histogram bins by 5将直方图 bin 对齐 5
【发布时间】:2017-05-02 20:20:10
【问题描述】:

您好,我有一些数据排列在大小为 5 的 bin 中。但是,轴与 bin 不对齐,因此很难看到它们的开始和结束位置。

我想重新定义轴,使标签以 5 为增量与最小值对齐(轴将有标签 204、209、214 等)

或者让 bin 以 5 的间隔开始,具体取决于系列中的最小值。例如,您可以看到我提供的数据集中的最小值是 204。到目前为止,这些 bin 在视觉上看起来是 204-208、209-213 等。一旦进行了更改,这些 bin 就会变为 200 -204、205-209 等

data <- data.frame(c(218, 213, 234, 223, 262, 251, 240, 235, 236, 237, 245, 229, 261, 269, 256, 239, 255, 258, 221, 231, 246, 248, 206, 204, 211))

ggplot(data=data, aes(data)) + 
  geom_histogram(breaks=seq(min(data), max(data), by =5),
             col="black",
             fill="grey") +
  scale_x_continuous(breaks = pretty_breaks(n=20)) +
  labs(x="Data Value", y="Count", title = "Histogram of Data Values") +
  theme(plot.title = element_text(hjust = 0.5, size=20))

【问题讨论】:

  • 那么,您在这里具体询问哪个选项?
  • 我更喜欢第一个选项,但哪个选项更容易实现都可以。

标签: r ggplot2


【解决方案1】:

您的第二个选项实施起来更简单:

data <- data.frame(x = c(218, 213, 234, 223, 262, 251, 240, 235, 236, 237, 245, 229, 261, 269, 256, 239, 255, 258, 221, 231, 246, 248, 206, 204, 211))

ggplot(data, aes(x)) + 
  geom_histogram(binwidth = 5, boundary = 5, fill = "white", colour = "black") + 
  scale_x_continuous(breaks = seq(0, 1000, by = 5))

bindwidth = 将 bin 设置为 5 的倍数。boundary = 设置其中一个 bin 的边缘(即使超出范围,它们都将在 boundary + n * binwidth,对于任意 n)。

第一个涉及更多,因为您必须在geomscale 中指定数据的最小值和最大值。

ggplot(data, aes(x)) + 
  geom_histogram(binwidth = 5, boundary = min(data$x), fill = "white", colour = "black") + 
  scale_x_continuous(breaks = seq(min(data$x), max(data$x) + 4, by = 5))

【讨论】:

  • 两种解决方案都很完美。谢谢。
【解决方案2】:

对于第一个选项,我认为您可以使用breaks 而不是pretty_breaks 来强制scale_x_continuous 中的中断:

ggplot(data=data, aes(data)) + 
  geom_histogram(breaks=seq(min(data), max(data), by =5),
                 col="black",
                 fill="grey") +
  scale_x_continuous(breaks = seq(min(data), max(data), by = 5)) +
  labs(x="Data Value", y="Count", title = "Histogram of Data Values") +
  theme(plot.title = element_text(hjust = 0.5, size=20))

【讨论】:

  • 这个解决方案是成功的,并且完全符合我的要求,但是,如果数据值 240 更改为 272,给出一个新的最大值,该数据值不会调整并且数据值的计数总数为 24 而不是 25。
  • 很公平。另外,@Brian 已经展示了这两种解决方案——我同意他的答案是正确的。
猜你喜欢
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多