【问题标题】:Create multiple plots from multiple dataframes (not ggplot) in r在 r 中从多个数据框(不是 ggplot)创建多个图
【发布时间】:2021-12-09 08:02:12
【问题描述】:

你好,我有一个大数据框,我按照下一个代码拆分:

DF2 <- split(df, df$Species)
        new_names <- as.character(unique(df$Species))
    for (i in 1:length(DF2)) {
      assign(new_names[i], DF2[[i]])
    }

给我很多数据框,每个数据框都有相同的起始字母 DF2Fish-XX,其中 XX 是唯一的物种:

现在我想要一个循环函数来使用以下代码为每个物种(唯一数据框)创建多个图:

par(mfrow=c(2,2))
DF2Plot <- function(index){plot(DF2Fish-XX[,index] ~ DF2Fish-XX$Year, 
                          main=names(DF2Fish-XX[index]), xlab= "Years", 
                          ylab = "Trophic position", type="b", xlim=range(1930:2020), ylim=range(2:5))}
lapply(2:5, FUN= DF2Plot)

有没有办法让脚本的第二部分(创建情节)为在第一部分代码中创建的每个唯一物种/数据框循环?

欢迎任何帮助。

提前致谢!

【问题讨论】:

  • 您应该尝试使用您创建的每个物种的数据框列表:lapply(DF2, function(data) plot(y ~ x, data = data, main = unique(data$Species), ...))
  • 如何使它们可见?每个物种分开;)
  • 对于@rawr 的评论,请参阅stackoverflow.com/a/24376207/3358227许多 使用帧列表中的数据的好例子。
  • 您已经有了一个数据框列表,其中每个物种都是分开的,所以当您在lapply 中运行plot(...) 时,您将获得每个物种的新图
  • 我以后有没有办法单独提取它们?

标签: r loops plot


【解决方案1】:

我将使用iris 进行演示。

irisL <- split(iris, iris$Species)
names(irisL)
# [1] "setosa"     "versicolor" "virginica" 
par(mfrow = c(2, 2))
for (nm in names(irisL)) {
  plot(Sepal.Length ~ Sepal.Width, data=irisL[[nm]], main=nm)
}

如果你的框架列表没有命名,那么你可以这样索引:

for (ind in seq_along(irisL)) {
  # ...
}

虽然您需要一种直接的方式来推断名称(可能是as.character(irisL[[ind]]$Species[1]))。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2018-06-11
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多