6

问题:

我有一个包含 2 个变量(x,y)的数据框。y 变量“通常”在“小范围”内变化。数据框中的异常值很少。这是一个例子:

# uniform sample data frame
# y variable "typically" varying in a "small" range between 0 and 1
df = data.frame(
  x = 1:100,
  y = runif(100)
  )

# add 2 outlier to data frame
# yielding a data frame 
# with 99 normal values and 1 outlier
df[3, 2] = 50
df[4, 2] = -50

因此,数据框在 y 变量中有 98 个典型值和 2 个异常值,从前 10 行可以看出head(df, 10)

        x           y
1   1   0.9785541
2   2   0.2321611
3   3  50.0000000
4   4 -50.0000000
5   5   0.8316717
6   6   0.1135077
7   7   0.9633120
8   8   0.1473229
9   9   0.1436269
10 10   0.9252299

当将数据框绘制为条形图 (y~x) 时,ggplot2 会自动(正确地)将 y 轴缩放到观察到的 y 值的整个范围:

require("ggplot2")
ggplot(df, aes(x, y)) + geom_bar(stat="identity") 

不需要的图,2 个异常值扩展了 y 刻度,y 变量的 98 个数据点看起来几乎相同

为了专注于“典型”值,我希望 ggplot2 将 y 轴比例保持在“小”比例上,绘制离轴限制的异常值。

这是我的第一次尝试:

lower.cut = quantile(df$y, 0.02)  
# = 0.01096518
upper.cut = quantile(df$y, 0.98)  
# = 0.9872347 

ggplot(df, aes(x, y)) + geom_bar(stat="identity") +
  coord_cartesian( ylim = c(-lower.cut*1.1, upper.cut*1.1) )

想要情节外观,但半自动 .cut 设置

问题:

第一次尝试的缺点是 0.02 和 0.98 分位数设置有点随意。

是否有一种更智能(不那么随意,更有统计证明)的方法让 ggplot2 自动将其轴限制为典型值,同时允许将异常值绘制到轴限制之外?

我调查的答案:

4

0 回答 0