3

我想使用 r 的 lattice 包叠加一个直方图和一个表示累积分布函数的 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))

堆积地块

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

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

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

2 回答 2

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")
          })

在此处输入图像描述

于 2012-11-14T08:18:26.337 回答
3

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

包中的hist() 函数graphics有一个名为add. 以下以“经典”方式执行您想要的操作:

plot( my.df$x, my.df$cdf * 100, type= "l" )
hist( my.df$x, add= T )
于 2012-11-13T22:22:08.083 回答