首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于动态更改绘图标题的For循环

用于动态更改绘图标题的For循环
EN

Stack Overflow用户
提问于 2021-06-17 20:37:22
回答 1查看 106关注 0票数 0

我有5个变量,想要在一个pdf中绘制和导出。但是,我在运行for循环时遇到了一些问题,

代码语言:javascript
复制
parC <-list(unit = 100,labelx = "Time",labely = "Time",cols = "black",
            pcex = .01, pch = 1,las = 1,
            labax = seq(0,nrow(RP),100),
            labay = seq(0,nrow(RP),100))

pdf("filename.pdf", onefile=TRUE) 
for (i in RP_values){ # the values that are plotted
  for (j in name) { # name is a list of names, so that the title changes dynamically
  plotting(i, parC, j)
  }
}
dev.off()

RP_values =绘制的值列表name =动态更改绘图标题的名称列表plotting =来自crqa包的plotRP()函数的调整版本。在这里,我给这个图添加了一个主标题。

plotting()函数的代码如下:

代码语言:javascript
复制
plotting <- function(RP, par, x){
  
  if (exists("par") == FALSE){ # we use some defaults
    ## default values
    unit  = 2; labelx = "Time"; labely = "Time" 
    cols  = "black"; pcex = .3; pch = 1; las = 0;
    labax = seq(0, nrow(RP), unit); labay = seq(0, nrow(RP), unit);
  } else { # we load the values that we desire
    for (v in 1:length(par)) assign(names(par)[v], par[[v]])
  }
  
  xdim   = nrow(RP)
  ydim   = ncol(RP)
  
  RP = matrix(as.numeric(RP), nrow = xdim, ncol = ydim) # transform it for plotting
  
  ind = which(RP == 1, arr.ind = T)
  
  tstamp = seq(0, xdim, unit)
  
  par(mar = c(5,5, 1, 3), font.axis = 2, cex.axis = 1,
      font.lab = 2, cex.lab = 1.2)
  
  plot(tstamp, tstamp, type = "n", xlab = "", ylab = "", xaxt = "n", yaxt = "n", main = x)
  matpoints(ind[,1], ind[,2],  cex = pcex, col = cols, pch = pch) 
  
  mtext(labelx, at = mean(tstamp), side = 1, line = 2.2, cex = 1.2, font = 2)
  mtext(labely, at = mean(tstamp), side = 2, line = 2.2, cex = 1.2, font = 2)
  
  
  #  if (is.numeric(labax)){ ## it means there is some default
  #    mtext(labax, at = seq(1, nrow(RP), nrow(RP)/10), side = 1, line = .5, cex = 1, font = 2)
  #    mtext(labay, at = seq(1, nrow(RP), nrow(RP)/10), side = 2, line = .5, cex = 1, font = 2)
  #  } else{
  mtext(labax, at = tstamp, side = 1, line = .5, cex = .8, font = 2, las = las)
  mtext(labay, at = tstamp, side = 2, line = .5, cex = .8, font = 2, las = las)
  
  # }
  
}

我的问题是,我得到的不是5个图,而是25个,每个图出现5次,但标题不同。如果我不包括"j“部分,一切都很好,但当然没有任何主标题为每个情节。

我很感谢你的帮助。

最好的,约翰逊

EN

回答 1

Stack Overflow用户

发布于 2021-06-17 21:32:56

从你的描述和评论来看,你似乎需要一个元素式循环,而不是嵌套循环。考虑使用expand.grid检索namesRP_values的所有成对组合,并使用mapply遍历它们。此外,由于parC依赖于相应RPnrows,因此在function中仅为两个参数定义parC (使用更具信息性的名称,如title而不是x):

代码语言:javascript
复制
plotting <- function(RP, title) {
    parC <- list(unit=100, labelx="Time", labely="Time",
                 cols="black", pcex=.01, pch=1, las=1, 
                 labax=seq(0, nrow(RP), 100), 
                 labay=seq(0, nrow(RP), 100))
    ...

    plot(tstamp, tstamp, type="n", xlab="", ylab="", 
         xaxt="n", yaxt="n", main=title)

    ...
}

params <- expand.grid(RP_values=RP_values, name=name)

out <- mapply(plotting, RP=params$RP_values, title=params$name)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68019519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档