2
下面的脚本运行并绘制数据序列的贝叶斯变化点(bcp),其中包含6列数据,这里引用为x < -13:18即数据中的第13至18列文件2GB01.csv。问题是只绘制了第18列的输出图。我需要修改脚本来绘制一个图形窗口分区中每列数据集的6个图。 有什么帮助吗?在R中的循环操作下绘制图形
数据文件看起来是这样.... COL1 COL2 .... col13 col14 col15 col16 col17 col18 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
的脚本如下书面....
在此处输入代码
data2<-read.csv("2GB01.csv", header=TRUE, row.names=1)
x <- 13:18
for(i in seq(along=x)){
ond<-data2[,i]
bcp.1<-bcp(as.vector(ond))
if (require("strucchange")) {
bp <- breakpoints(ond ~ 1, h = 2)$breakpoints
rho <- rep(0, length(ond))
rho[bp] <- 1
b.num<-1 + c(0,cumsum(rho[1:(length(rho)-1)]))
bp.mean <- unlist(lapply(split(ond,b.num),mean))
bp.ri <- rep(0,length(ond))
for (i in 1:length(bp.ri)) bp.ri[i] <- bp.mean[b.num[i]]
xax<-seq(1960, 2010, length=51)
op <- par(mfrow=c(2,1),col.lab="black",col.main="black")
op2 <- par(mar=c(0,4,4,4.5),xaxt="n",yaxt="n", cex.axis=0.75,las=2)
plot(xax, ond, col="grey", pch=20, xlab="",ylab="", axes=T)
lines(xax, bcp.1$posterior.mean, lwd=2)
axis(4, yaxt="s")
mtext('Posterior mean', las=0, side=4, line=3.5)
lines(bp.ri, col="blue")
par(op2)
op3 <- par(mar=c(5,4,0,4.5), xaxt="s",yaxt="n", cex.axis=0.75,las=2)
plot(xax, bcp.1$posterior.prob, xlab="Year", ylab="Posterior probability", type="l", xlim=c(1960,2010), ylim=c(0,1),las=0)
for (i in 1:length(bp.ri)) abline(v=xax[bp[i]], col="blue")
axis(2, yaxt="s")
par(op3)
par(op)
} else {
cat("strucchange is not loaded")
}}
我已经尝试了您的建议,但仍然无效。我收到错误“plot.new()中的错误:图形边距太大”。我试图减少地块利润率,但我仍然得到同样的错误。我忘了提及脚本运行的脚本必须在R中加载“bcp”和“strucchange”包。 – Vincent
这可能与您在其中存在的所有其他错误有关。从基础开始:'par()'调用,'for'循环,并且在循环的每次迭代中只有一个绘图命令。然后重新构建它以查找您想要的方式。 –
谢谢Ari,你说得对,我只需要将“op < - par(mfrow = c(2,1),col.lab =”black“,col.main =”black“)移到循环外部,但必须用mfcol替代mfrow :)这对我来说很愚蠢,干杯。 – Vincent