叠加直方图和xyplot

时间:2012-11-13 21:35:44

标签: r histogram lattice

我想使用r的晶格包重叠直方图和表示累积分布函数的xyplot。

我试图通过自定义面板功能实现这一目标,但似乎无法做到正确 - 我在一个情节中被挂起来是单变量的,而我认为其中一个是双变量的。

以下是我想要垂直堆叠的两个图的示例:

set.seed(1)
x <- rnorm(100, 0, 1)

discrete.cdf <- function(x, decreasing=FALSE){
    x <- x[order(x,decreasing=FALSE)]
    result <- data.frame(rank=1:length(x),x=x)
    result$cdf <- result$rank/nrow(result)
    return(result)
}

my.df <- discrete.cdf(x)

chart.hist <- histogram(~x, data=my.df, xlab="")
chart.cdf <- xyplot(100*cdf~x, data=my.df, type="s",
                    ylab="Cumulative Percent of Total")

graphics.off()
trellis.device(width = 6, height = 8)
print(chart.hist, split = c(1,1,1,2), more = TRUE)
print(chart.cdf, split = c(1,2,1,2))

stacked plots

我希望这些叠加在同一帧中,而不是堆叠。

以下代码不起作用,也没有尝试过我的任何简单变体:

xyplot(cdf~x,data=cdf,
          panel=function(...){
              panel.xyplot(...)
              panel.histogram(~x)
          })

2 个答案:

答案 0 :(得分:4)

您使用自定义面板功能处于正确的轨道上。诀窍是将正确的参数传递给panel. - 函数。对于panel.histogram,这意味着传递公式并为breaks参数提供适当的值:

编辑 y轴上的正确百分比值和图表的type

xyplot(100*cdf~x,data=my.df,
          panel=function(...){
              panel.histogram(..., breaks = do.breaks(range(x), nint = 8),
                type = "percent")
              panel.xyplot(..., type = "s")
          })

enter image description here

答案 1 :(得分:3)

这个答案只是一个占位符,直到更好的答案出现。

hist()包中的graphics函数有一个名为add的选项。以下以“经典”方式完成您的工作:

plot( my.df$x, my.df$cdf * 100, type= "l" )
hist( my.df$x, add= T )