R - 控制直方图Y轴限制在第二高峰

时间:2016-04-13 21:47:17

标签: r ggplot2 histogram

我编写了一个R脚本,循环遍历data.frame制作包含直方图的多个复杂图。问题在于直方图通常在x=0x=1处显示高而无信息的峰值,并且它模糊了其他更有用的数据。我已经发现我可以通过定义每个直方图的x和y轴的极限来隐藏高峰,如下面的代码所示 - 但我真正需要弄清楚的是如何定义y轴限制使得它们针对我的直方图中的第二大峰值进行了优化。

这里有一些模拟我的数据的代码,并绘制了不同种类的轴限制的直方图:

require(ggplot2)
set.seed(5)

df = data.frame(matrix(sample(c(1:10), 1000, replace = TRUE, prob = c(0.8,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01)), nrow=100))

cols = names(df)
for (i in c(1:length(cols))) {
  my_col = cols[i]
  p1 = ggplot(df, aes_string(my_col)) + geom_histogram(bins = 10) 
  print(p1)
  p2 = p1 + ggtitle(paste("Fixed X Limits", my_col)) + scale_x_continuous(limits = c(1,10))
  print(p2)
  p3 = p1 + ggtitle(paste("Fixed Y Limits", my_col)) + scale_y_continuous(limits = c(0,3))
  print(p3)
  p4 = p1 + ggtitle(paste("Fixed X & Y Limits", my_col)) + scale_y_continuous(limits = c(0,3)) + scale_x_continuous(limits = c(1,10))
  print(p4)
}

问题在于,在这些数据中,我可以对y限制进行硬编码,并且合理地期望它们能够适用于所有直方图。根据我的真实数据,峰值的大小在我生成的众多直方图之间变化很大。我已经尝试使用基于描述性数字(如均值,中位数和范围)的各种方程来定义y限制,但是我提出的任何方法都不适用于所有情况。

如果我可以定义与柱状图的第二高峰相关的y限制,我会得到一些非常适合每种情况的东西。

1 个答案:

答案 0 :(得分:2)

我会处理数据以确定您需要的高度。

有些事情:

sort(table(cut(df$X1,breaks=10)),T)[2]

从内到外工作 cut 将对数据进行分类(对于整数数据不是真的需要,但可能需要实际数据

表格然后创建一个表格,其中包含每个分档的计数

排序将表格从最高到最低排序

[2] 获得第二高的值