【问题标题】:histogram breaks with not continuous break points直方图以不连续的断点中断
【发布时间】:2015-10-01 07:18:44
【问题描述】:

如何在直方图中使用预定义的断点而不是连续的断点来设置 X 轴。

breaks=c(0,5,10,100,200,1000)

根据 bin 范围内的频率选择断点。如何实现这个而不是breaks=c(0,5,10,15,20)连续断点?

编辑: 我已经分别计算了频率并使用geom_bar 绘制

期望与hist 绘图类似的输出。

【问题讨论】:

  • 所以您只想在 ggplot 图上标记预定义的断点?
  • @Chris 我想绘制这些间隔(断点)中数据点的频率。
  • 所以你想绘制落在任何预定义 bin 中的点数,或者你想绘制一个带有预定义点数的 bin 的图(即,创建宽度满足预定义包含计数的箱)。
  • @Chris 已经包含了情节,这能回答你的问题吗?

标签: r ggplot2 histogram


【解决方案1】:

也许我不明白这个问题。但你不能这样做吗?

x <- rnorm(1000, mean= 10, sd= 5)
range(x) # need to have the whole range of x in the histogram
hist(x, breaks= c(range(x)[1], 0, 5, 7, 12, 20, range(x)[2]))

library(ggplot2)
brks=c(range(x)[1], 0, 5, 7, 12, 20, range(x)[2])
ggplot(data.frame(x), aes(x=x)) + 
  geom_histogram(breaks= brks) + scale_x_continuous(breaks= brks)

您显然可以为您想要的任何格式添加 theme(... element_text()) 选项

【讨论】:

  • 感谢您的建议。我已经尝试过这种方法,您是否观察到尽管 bin 长度发生了变化,但标签仍然相同?
  • 我不确定您所说的标签是什么意思。可重复的例子总是很受欢迎
  • 我的意思是在将断点更改为c(range(x)[1], 0, 5, 7, 12, 20, range(x)[2]) 后标签为c(-10,-5,0,5,10,15,20,25)
  • 我不确定你是否可以在基本图形中解决这个问题,但你当然可以在 ggplot 中通过scale_x_continuous()... 我会更新我的答案
【解决方案2】:

如果你仍然感兴趣,也许是这样的:

library(plyr)
library(ggplot2)
library(dplyr)

data("diamonds")
head(diamonds)
c(0,1000,4000,20000) -> breaks
cut(diamonds$price, breaks = breaks) -> diamonds$newprice

diamonds %>%
  group_by(cut, newprice) %>% 
  summarise(num = n()) %>%
  as.data.frame -> newdi

ggplot(data = newdi) +
  geom_bar(aes(x = newprice, y = num, fill = cut), stat = "identity", position = "dodge") 

【讨论】:

    【解决方案3】:

    通常,直方图将具有相同大小的 bin,因为它旨在作为概率分布的估计值。

    您可以自己进行计数聚合,然后利用 geom_bar() 创建具有特定 bin 间隔的条形图。

    【讨论】:

    • 感谢您的建议,我已经着手解决此问题。我想知道是否可以使用“breaks”选项或任何其他替代而不是手动干预来完成某些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2013-06-20
    • 1970-01-01
    相关资源
    最近更新 更多