我想使用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))
我希望这些叠加在同一帧中,而不是堆叠。
以下代码不起作用,也没有尝试过我的任何简单变体:
xyplot(cdf~x,data=cdf,
panel=function(...){
panel.xyplot(...)
panel.histogram(~x)
})
答案 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")
})
答案 1 :(得分:3)
这个答案只是一个占位符,直到更好的答案出现。
hist()
包中的graphics
函数有一个名为add
的选项。以下以“经典”方式完成您的工作:
plot( my.df$x, my.df$cdf * 100, type= "l" )
hist( my.df$x, add= T )