使用ggplot2绘制多个数据的线图并另存为pdf

问题描述

使用以下三个不同的数据集,

    mean=replicate(10,rnorm(10))        
    colnames(mean)=paste0(rep(c("x0","x1","x2","x3","x4"),2),"_c",rep(c(1:2),each=5))
    meanpos=replicate(10,rnorm(10))+1.5
    meanneg=replicate(10,rnorm(10))-1.5
    hcol=c(0,0.5,0.75,1.0,1.1,1.20,0.8,-0.025)#vector of size ncol(mean)

我可以使用以下for循环创建线图

par(mfrow=c(2,2))
for ( v in 1:ncol(mean)){
  plot(mean[,v],type = "l",ylim = c(min(meanpos[,mean[,v]),max(meanpos[,v])),xlab = "sl no",ylab = "",main = colnames(mean)[v])
  abline(h=hcol[v],col="purple")
  lines(meanpos[,col="blue")
  lines(meanneg[,col="green")
}

每列一个图,轮廓为2 by 2。这是一些情节

enter image description here

如何使用ggplot2函数创建相似的图,每行带有图例并另存为pdf文件

感谢您的帮助

解决方法

如果要使用require.resolve,则可以将数据格式化为下一个。最好将数据从矢量保存到数据帧,然后可以绑定所有数据以进行整形,并使用构面而不是像循环那样具有所需的图形。您可以从ggplot2调整ncol参数,以定义矩阵结构。这里的代码使用您提供的数据。我还添加了具有数据框并轻松使用facet_wrap()函数的步骤:

ggplot2

我们将数据保存在数据框中并标识所有值:

library(tidyverse)
#Initial data
set.seed(123)
#Data
mean=replicate(10,rnorm(10))        
colnames(mean)=paste0(rep(c("x0","x1","x2","x3","x4"),2),"_c",rep(c(1:2),each=5))
meanpos=replicate(10,rnorm(10))+1.5
meanneg=replicate(10,rnorm(10))-1.5
hcol=c(0,0.5,0.75,1.0,1.1,1.20,0.8,-0.025)#vector of size ncol(mean)

对于整个数据,我们将其整形以使用构面:

#Concatenate all in a dataframe
df1 <- as.data.frame(mean) 
#Data for intercepts
hcol=c(0,-0.025)
#Dataframe
dfh <- data.frame(name=names(df1),hcol,stringsAsFactors = F)
#Mean pos
df2 <- as.data.frame(meanpos)
names(df2) <- names(df1)
#Mean neg
df3 <- as.data.frame(meanneg)
names(df3) <- names(df1)
#Assign ids
df1$id <- 'mean'
df2$id <- 'mean pos'
df3$id <- 'mean neg'
#Rows
df1$id2 <- 1:dim(df1)[1]
df2$id2 <- 1:dim(df2)[1]
df3$id2 <- 1:dim(df3)[1]
#Bind
dfm <- rbind(df1,df2,df3)

现在,剧情:

#Pivot
dfm %>% pivot_longer(cols = -c(id,id2)) -> dfm2

您可以使用#Sketch for plot G1 <- ggplot(dfm2,aes(x=id2,y=value,group=id,color=id))+ geom_line()+ geom_hline(data = dfh,aes(yintercept = hcol),color='purple')+ facet_wrap(.~name,scales='free')+ xlab("sl no")+ylab("")+ scale_color_manual(values = c('mean'='tomato','mean pos'='blue','mean neg'='green'))+ theme_bw()+ theme(legend.position = 'top') 另存为.pdf

ggsave()

输出:

enter image description here