问题描述
使用以下三个不同的数据集,
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
。这是一些情节
如何使用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()
输出: