题
我在 R
中使用 runjags
运行 JAGS
,然后我得到了一个巨大的列表(此示例的命名结果)。
每当我访问 results $ density
时,默认石英设备中会弹出两个点阵图
(每个参数一个)。
我需要将它们与 par(mfrow = c(2,1))
或类似的方法结合起来,并将它们发送到 pdf device
。
我没有尝试过任何工作。有什么想法吗?
我已经尝试 dev.print
, pdf()
和 dev.off()
等,没有运气。
解决方案
这是一种抛弃“V1”的方法。通过操纵Trellis结构的面板:
p1 <- results$density$c
p2 <- results$density$m
p1$layout <- c(1,1)
p1$index.cond[[1]] <- 1 # remove second index
p1$condlevels[[1]] <- "c" # remove "V1"
class(p1) <- "trellis" # overwrite class "plotindpages"
p2$layout <- c(1,1)
p2$index.cond[[1]] <- 1 # remove second index
p2$condlevels[[1]] <- "m" # remove "V1"
class(p2) <- "trellis" # overwrite class "plotindpages"
library(grid)
layout <- grid.layout(2, 1, heights=unit(c(1, 1), c("null", "null")))
grid.newpage()
pushViewport(viewport(layout=layout))
pushViewport(viewport(layout.pos.row=1))
print(p1, newpage=FALSE)
popViewport()
pushViewport(viewport(layout.pos.row=2))
print(p2, newpage=FALSE)
popViewport()
popViewport()
一壶c.trellis()结果http://img142.imageshack.us /img142/3272/ctrellisa.png
其他提示
组合图的最简单方法是使用存储在结果$ mcmc:
中的结果# prepare data, see source code of "run.jags"
thinned.mcmc <- combine.mcmc(list(results$mcmc),
collapse.chains=FALSE,
return.samples=1000)
print(densityplot(thinned.mcmc[,c(1,2)], layout=c(1,2),
ylab="Density", xlab="Value"))
例如,对于 run.jags
中包含的示例,请使用
sink("results_str.txt")
str(results$density)
sink()
然后您将看到名为 layout 的组件。可以使用
设置每个变量的两个图的布局results$density$m$layout <- c(1,2)
print(results$density$m)
可以使用 latticeExtra
包中的 c.trellis
方法组合不同参数的图。
class(results$density$m) <- "trellis" # overwrite class "plotindpages"
class(results$density$c) <- "trellis" # overwrite class "plotindpages"
library("latticeExtra")
update(c(results$density$m, results$density$c), layout=c(2,2))
c.trellis的输出http://img88.imageshack.us/img88/ 6481 / ctrellis.png
另一种方法是使用 grid
viewports:
library("grid")
results$density$m$layout <- c(2,1)
results$density$c$layout <- c(2,1)
class(results$density$m) <- "trellis"
class(results$density$c) <- "trellis"
layout <- grid.layout(2, 1, heights=unit(c(1, 1), c("null", "null")))
grid.newpage()
pushViewport(viewport(layout=layout))
pushViewport(viewport(layout.pos.row=1))
print(results$density$m, newpage=FALSE)
popViewport()
pushViewport(viewport(layout.pos.row=2))
print(results$density$c, newpage=FALSE)
popViewport()
popViewport()
不隶属于 StackOverflow