我编写了一个R脚本,循环遍历data.frame
制作包含直方图的多个复杂图。问题在于直方图通常在x=0
或x=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限制,我会得到一些非常适合每种情况的东西。
答案 0 :(得分:2)
我会处理数据以确定您需要的高度。
有些事情:
sort(table(cut(df$X1,breaks=10)),T)[2]
从内到外工作 cut 将对数据进行分类(对于整数数据不是真的需要,但可能需要实际数据
表格然后创建一个表格,其中包含每个分档的计数
排序将表格从最高到最低排序
[2] 获得第二高的值