Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用一个数据集中的两个Y自动化多个绘图/图形_R_For Loop_Ggplot2 - Fatal编程技术网

R 使用一个数据集中的两个Y自动化多个绘图/图形

R 使用一个数据集中的两个Y自动化多个绘图/图形,r,for-loop,ggplot2,R,For Loop,Ggplot2,我试图用两个Y变量绘制34个单独的时间曲线图。我的数据集是结构化的:X Y1A Y2A Y1B Y2B。Y1n Y2n 我可以通过简单地让ggplot绘制我想要的列来获得单独的plot。然而,在5个数据集中,我有34个绘图要做,所以自动化这将是有用的。我真的被困在如何构造语言来实现我想要它做的事情上。(新用户)。我不擅长for循环,甚至不知道这是否正是我想要使用的代码结构。我已经研究了apply函数,这些函数似乎并没有达到我想要的效果,因为我并没有试图操作我的数据,而是一次将所有数据绘制成图形

我试图用两个Y变量绘制34个单独的时间曲线图。我的数据集是结构化的:X Y1A Y2A Y1B Y2B。Y1n Y2n

我可以通过简单地让ggplot绘制我想要的列来获得单独的plot。然而,在5个数据集中,我有34个绘图要做,所以自动化这将是有用的。我真的被困在如何构造语言来实现我想要它做的事情上。(新用户)。我不擅长for循环,甚至不知道这是否正是我想要使用的代码结构。我已经研究了
apply
函数,这些函数似乎并没有达到我想要的效果,因为我并没有试图操作我的数据,而是一次将所有数据绘制成图形

我没有尝试过
melt
,但我再次陷入了如何一次创建两行的困境。我应该给我的专栏命名一些不同的/更容易自动化的名称吗

我搜索了几个小时,没有找到任何能完全回答我问题的东西


df <- matrix( c( 1,   0.011,    0.002,     0.007,      0.002,
              2,   0.011,      NA,   0.007, NA,
              3,   0.010,    0.002,     0.007,      0.002,
              4,   0.010,      NA,       0.007, NA, 
              5,   0.010,       NA,      0.006, NA, 
              6,   0.010,    0.002,    0.006,       0.002
              ), nrow = 6, ncol= 5, byrow= TRUE) 
colnames(df)<- c("time", "prefish1",  "obsfish1",  "prefish2",  "obsfish2")
biomass<-as.data.frame(df)
编辑 我刚试过这个:

pre<- biomass[+c(2,4)] 
obs<- biomass[+c(3,5)] 
for(i in 1:NCOL(pre)){
}
  for(k in 1:NCOL(obs)){
    plot(biomass$time, pre[,i], type= "l", xlab= "time", ylab ="biomass t/km2")
    par(new= TRUE)
    plot(biomass$time, obs[,k], type = "p", main = paste("Fit", names(obs)[k]), xlab= "time", ylab ="biomass t/km2")

  }

pre分面方法可以工作吗,还是需要单独的输出文件

在ggplot中实现这一点最常见的方法是将单独的运行放入facet中。要做到这一点,我们需要在将数据输入ggplot之前对其进行重塑:我们可以有一对列,另一列(
num
下面)指定每一行与哪个图形相关,而不是在每个图形的数据中有单独的列对。然后我们可以使用
num
变量映射到facet。(我们也可以使用相同的准备来完成第二项任务…)


另一个选项:构建用于打印的函数。然后创建两个名称向量,同时循环它们,传递给新创建的函数,并将结果保存在列表中。然后使用
plot\u grid
将所有绘图组合在一起

库(tidyverse)
##绘图函数

my_bio_plot请使用
dput(您的_数据)
添加一个可复制的数据示例。谢谢!我一直在考虑如何使用这个。目前,我想单独的输出文件。但我会玩一下这个。这里有一个类似的问题:我通过调用一个新的绘图窗口来实现它!非常感谢。或者您可以使用
ggsave
。如果一页中的绘图太多,
pre<- biomass[+c(2,4)] 
obs<- biomass[+c(3,5)] 
for(i in 1:NCOL(pre)){
}
  for(k in 1:NCOL(obs)){
    plot(biomass$time, pre[,i], type= "l", xlab= "time", ylab ="biomass t/km2")
    par(new= TRUE)
    plot(biomass$time, obs[,k], type = "p", main = paste("Fit", names(obs)[k]), xlab= "time", ylab ="biomass t/km2")

  }
library(tidyr)   # Useful for reshaping the data
library(ggplot2)

biomass %>%
  # Gather data into long format
  gather(column, value, -time) %>%
  # Separate the number of graph from the type of column
  separate(column, c("var", "num"), sep = -1) %>%
  # Put the two types of column back into separate columns
  spread(var, value) %>%


  ggplot(aes(x= time, group = num)) +
  geom_line(aes(y = prefish)) +
  geom_point(aes(y= obsfish)) +
  facet_wrap(~num) +
  ylab("biomass t/km2") + 
  ##I would also like to title them using the header one of the column pairs## 
  theme_classic()