在R中使用ggplot2按顺序循环打印大量图形(PDF)

在R中使用ggplot2按顺序循环打印大量图形(PDF),r,loops,ggplot2,R,Loops,Ggplot2,我有一个大的数据集作为贝叶斯逻辑回归的结果。数据集包含参数估计值、置信区间等(head见下文) 我总共有714行数据,从低到高排序(平均值)。我使用这段代码一次绘制50行,其中a3_排序是50行数据的子集(因此手动执行a3_排序您可以尝试此解决方案。我使用虚拟数据DF测试714行和与您相同的列。DF在您的情况下是714行的排序数据框和您拥有的变量。我设置了代码,以便您可以在需要大于50的宽度时进行更改。 library(zoo) #Create keys; change 50 if you wa

我有一个大的数据集作为贝叶斯逻辑回归的结果。数据集包含参数估计值、置信区间等(head见下文)


我总共有714行数据,从低到高排序(平均值)。我使用这段代码一次绘制50行,其中a3_排序是50行数据的子集(因此手动执行
a3_排序您可以尝试此解决方案。我使用虚拟数据
DF
测试
714
行和与您相同的列。
DF
在您的情况下是
714
行的排序数据框和您拥有的变量。我设置了代码,以便您可以在需要大于50的宽度时进行更改。

library(zoo)
#Create keys; change 50 if you want a larger window
keys <- seq(1, nrow(DF), 50)
vals=1:length(keys)
#Flag to allocate the position and values
#na.locf is used to complete NA so that we have same index
DF$Flag <- NA
DF$Flag[keys]<-vals
DF$Flag <- na.locf(DF$Flag)
#Then split by flag
ListData <- split(DF,DF$Flag)
#Function to create plot
myplot <- function(x)
{
  tplot <- ggplot2::ggplot(data = x, mapping = aes(x = reorder(spec, mean), y = mean, ymin = confint_97.5, ymax = confint_2.5))+
    geom_pointrange()+
    geom_hline(yintercept = 0, lty = 2)+
    coord_flip()+
    xlab ("species") +ylab ("mean (credibility interval)")+
    theme_bw()
  return(tplot)
}
#Replicate plots
LPlots <- lapply(ListData,myplot)
#Export to pdf
pdf('Myplots.pdf',width = 14)
for(i in c(1:length(LPlots)))
{
  plot(LPlots[[i]])
}
dev.off()
 
图书馆(动物园)
#创建关键点;如果需要较大的窗口,请更改50

键您可以尝试此解决方案。我使用虚拟数据
DF
测试了
714
行和与您相同的列。
DF
在您的示例中是您的
714
行的排序数据框和变量。我设置了代码,以便您可以在需要大于50的宽度时进行更改

library(zoo)
#Create keys; change 50 if you want a larger window
keys <- seq(1, nrow(DF), 50)
vals=1:length(keys)
#Flag to allocate the position and values
#na.locf is used to complete NA so that we have same index
DF$Flag <- NA
DF$Flag[keys]<-vals
DF$Flag <- na.locf(DF$Flag)
#Then split by flag
ListData <- split(DF,DF$Flag)
#Function to create plot
myplot <- function(x)
{
  tplot <- ggplot2::ggplot(data = x, mapping = aes(x = reorder(spec, mean), y = mean, ymin = confint_97.5, ymax = confint_2.5))+
    geom_pointrange()+
    geom_hline(yintercept = 0, lty = 2)+
    coord_flip()+
    xlab ("species") +ylab ("mean (credibility interval)")+
    theme_bw()
  return(tplot)
}
#Replicate plots
LPlots <- lapply(ListData,myplot)
#Export to pdf
pdf('Myplots.pdf',width = 14)
for(i in c(1:length(LPlots)))
{
  plot(LPlots[[i]])
}
dev.off()
 
图书馆(动物园)
#创建关键点;如果需要较大的窗口,请更改50

钥匙此方法可适用于您的情况:

#一些虚拟数据:
df空值
#>在图像中保存7 x 5
#>空的

由(v0.3.0)于2020年7月11日创建此方法可适用于您的情况:

#一些虚拟数据:
df空值
#>在图像中保存7 x 5
#>空的

由(v0.3.0)于2020-07-11创建。因此,您是否希望从原始数据中获得每个50行数据帧的绘图?是的,准确无误。总共15个绘图,而无需手动子集和保存绘图。我已为您的问题添加了一个可能的解决方案。请检查并让我知道它是否有效:)那么,您希望从原始数据中获得的每50行数据帧有一个绘图吗?是的,完全正确。总共有15个绘图,而无需手动子集和保存绘图。我为您的问题添加了一个可能的解决方案。请检查并让我知道它是否有效:)嗨,Duck,谢谢您的回复!不幸的是,这对我有用!我做了一些调整(例如,对于不同的绘图,保持轴长度相同)。谢谢你的代码!嗨,鸭子,谢谢你的回复!不幸的是,这对我有用!我做了一些调整(例如,对于不同的绘图,保持轴长度相同)。谢谢你的代码!
library(zoo)
#Create keys; change 50 if you want a larger window
keys <- seq(1, nrow(DF), 50)
vals=1:length(keys)
#Flag to allocate the position and values
#na.locf is used to complete NA so that we have same index
DF$Flag <- NA
DF$Flag[keys]<-vals
DF$Flag <- na.locf(DF$Flag)
#Then split by flag
ListData <- split(DF,DF$Flag)
#Function to create plot
myplot <- function(x)
{
  tplot <- ggplot2::ggplot(data = x, mapping = aes(x = reorder(spec, mean), y = mean, ymin = confint_97.5, ymax = confint_2.5))+
    geom_pointrange()+
    geom_hline(yintercept = 0, lty = 2)+
    coord_flip()+
    xlab ("species") +ylab ("mean (credibility interval)")+
    theme_bw()
  return(tplot)
}
#Replicate plots
LPlots <- lapply(ListData,myplot)
#Export to pdf
pdf('Myplots.pdf',width = 14)
for(i in c(1:length(LPlots)))
{
  plot(LPlots[[i]])
}
dev.off()