【问题标题】:How to know names of plot? [duplicate]如何知道地块的名称? [复制]
【发布时间】:2019-09-13 18:02:30
【问题描述】:

在 for 循环中使用 ggplot2 不会显示绘图名称 我想将绘图打印到一页并保存

我有 60 个 csv 文件,每个文件由两列组成,第一列是日期,第二列是 ssh,每个都有不同的行号。我将它们列在名为 files 的变量中,然后绘制它们。 for 循环产生了 60 个图。问题是如何知道这些地块的名称以便在我想要的时候调用它们,例如在一页中打印 4 个图,所以最后我将有 15 页,每页包含 4 个图。 当我使用

library(gridExtra)
grid.arrange(p1,p2,p3,p4, nrow=2,ncol=2)
grid.arrange(p5,p6,p7,p8, nrow=2,ncol=2) 

以此类推,直到 p60 它没有显示任何结果。警告消息说没有名为 p1、p2、p3、p4、....p60 的对象。

代码如下:

files<- list.files("F:/R Practice/time series")
for (i in seq_along(files)){
  mydf <- read.csv(files[i], stringsAsFactors=FALSE)
  a<- data.frame(as.Date(mydf$date, "%d-%m-%y"),mydf[,-1])
  names(a)[1]<- "Date"
  names(a)[2]<- "SSH"
  b <- zoo(a[,-1],order.by=as.Date(a[,1]))
  p<- ggplot(a, aes(x=Date,y=SSH, color=SSH)) +geom_line(colour="darkblue")# +labs(title = "gridcell of (31.25N, 33.25E) ",x="Date", y="SSH")
  p<-p+ggtitle(readline(prompt = "enter cell coordinates:  "))+xlab("Year")+ylab("weighted average SSH of center cell")
  # adding atrribute to the plot p[i]
  p<-p+theme(axis.title.x=element_text(color = "black",size = 12),
               axis.title.y=element_text(color = "black",size = 8),
               axis.text.x=element_text(color="black",size=8),
               axis.text.y = element_text(color = "black",size = 8),
               panel.background = element_rect(colour = "black", size=0.5 ,fill = NA),
               panel.grid.minor = element_blank(),
               panel.grid.major = element_blank(),
               axis.line = element_line(colour = "black",size=1),
               legend.position="none" ,
           plot.title=element_text(hjust = 0.5,vjust= 0.5,lineheight = .3,face = "bold"))

  print(p)
}

【问题讨论】:

  • See here 提出一个人们可以帮助解决的 R 问题。这包括一个数据样本、所有必要的代码,以及对你正在尝试做什么和什么没有奏效的清晰解释。我们既没有你的数据也没有你的输出,所以我们只是猜测。您似乎也在尝试使用您从未创建的对象:也许您的意思是 p[1] 而不是 p1?

标签: r ggplot2


【解决方案1】:

您的代码每次都将p 覆盖到最后一个情节。这是使用 ggplot2 帮助示例中的示例的更简单的代码,但使用了像您这样的循环。

df <- data.frame(
       gp = factor(rep(letters[1:3], each = 10)),
       y = rnorm(30)
   )

p.list<- list()
for (i in 1:4)
{
  df<- sample_frac(df, 0.5)

  p<- ggplot(df, aes(gp, y)) +
    geom_point() +
    geom_point(data = ds, aes(y = mean), colour = 'red', size = 3)
  p.list[[i]] <-p
}

grid.arrange(p.list[[1]], p.list[[2]], p.list[[3]], p.list[[4]], nrow= 2 )

注意两点:

  1. p.list 以空列表开头。

  2. 在每个循环结束时,您将绘图添加到不断增长的列表的编号元素,即p.list[[i]] &lt;- p

  3. p.list 成长为一个列表,每个编号元素 (1:4) 包含一个图,每个图也是一个命名列表。

【讨论】:

  • 非常感谢。它有效。
猜你喜欢
  • 2022-08-24
  • 2022-07-06
  • 2016-02-07
  • 2012-01-06
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
相关资源
最近更新 更多