split.screen
옵션을 사용하여 여러 개의 그림을 생성하려고하는데이 페이지에 7 개의 그림이 있어야합니다. 그 중 하나는 자체적으로 플롯되어야하고 다른 루프는 for 루프를 사용하여 반복적으로 플롯됩니다.split.screen을 사용하여 그림 여백 조정
이것은 내가 수행중인 일부 시뮬레이션을위한 코드입니다. 그것은 잘 실행,하지만 난이 잠재적 인 문제를 가지고
- 내가 더 큰 음모에 표시하기 위해 할당 된 레이블을 얻을 수 있기 때문에 플롯의 실제로 그려 도착하는 모르겠습니다.
- 화면 1에 표시된 플롯은 실제 데이터가 아니며 별도로 플롯하고 모양이 무엇인지 알았 기 때문에 실제 데이터가 아닙니다.
데이터를 시뮬레이션 :
는numpop = 2
N = 1250
nSNP = 5000
Fst = 0.001
omega = c(0.5, 0.5)
propnExtreme = 0.1
nsim = 10
Fst.obs = vector(length = nSNP)
pdiffs = vector(length = nSNP)
genomat = matrix(nrow = N, ncol = nSNP)
for (i in 1:nSNP){
p = runif(1, 0.1, 0.9)
alpha = p * (1 - Fst)/Fst
beta = (1 - p) * (1 - Fst)/Fst
ps = rbeta(numpop, shape1 = alpha, shape2 = beta)
vars = var(ps)
pdiffs[i] = max(ps) - min(ps)
Fst.obs[i] = vars/(p * (1 - p))
for (j in 1:numpop){
ind1 = (j-1) * N * omega[j] + 1
ind2 = j * N * omega[j]
freqs = c(ps[j]^2, 2 * ps[j] * (1 - ps[j]), (1 - ps[j])^2)
genomat[ind1:ind2, i] = sample(c(0, 1, 2), size = N*omega[j], replace = TRUE, prob = freqs)
}
}
snpmeans = colMeans(genomat)
pi = (1 + colSums(genomat))/(2 + 2*nrow(genomat))
stdmat = scale(genomat, center=snpmeans, scale=sqrt(pi*(1-pi)))
pr = prcomp(stdmat, center=F, scale=F)
플로팅 :
get(getOption("device"))()
png(file="myplot.png", width=2000, height = 1200)
par(oma = c(0,0,3,0))
split.screen(c(1,2)) # split display into two screens
plot(pr$x,
col = c(rep("red", N*omega[1]), rep("blue", N*omega[2])),
main = "Whole genotype data")
split.screen(c(2, 3), screen = 2) # now split the second into 2x3
for(i in 1:8) ## 8=#of screens
{
screen(i) # prepare screen i for output
fA=0.5
fa = 1-fA
combined_SNP <- sample(c(0:2), N, prob=c(fA^2, 2*fA*fa, fa^2), replace=T)
pheno_indep <-c()
##Phenotypes
for (i in 1:length(combined_SNP)){
if (combined_SNP[i] == '0') {
pheno_indep<- c(pheno_indep, rnorm(1, mean = 0.07, sd = 1))
} else if (combined_SNP[i ]== '1') {
pheno_indep <- c(pheno_indep, rnorm(1, mean = 0, sd = 1))
} else {
pheno_indep <- c(pheno_indep, rnorm(1, mean = -0.07, sd = 1))
}
}
l <- 1:N
combined_indep <- cbind(combined_SNP, pheno_indep, l)
sorted_combined <- combined_indep[order(combined_indep[, 2]), ]
##eps data
f = 0.1
Nums = nrow(sorted_combined)
keep <- c(1:(f*Nums), (Nums-(f*Nums)+1):Nums)
epsdat<- c(rep("0", f*Nums), rep("1", f*Nums))
EPS_dat <- as.factor(cbind(sorted_combined[keep, ], epsdat))
dim(EPS_dat) <- c(length(keep), 4)
#colnames(EPS_dat) <- c("Genotypes", "Phenotypes", "ID", "position")
PC_EPS <- prcomp((genomat[EPS_dat[, 3], ]))
plot(PC_EPS$x,
col=c(rep("red", f*Nums), rep("blue", f*Nums)))
}
close.screen(all=TRUE)
dev.off()
결과 : 내가하려고 많은 시간을 보냈습니다
도이를 파악하기같은 다른 패키지와 함께. 감사!
제발, 실제로 어떤 그림이 플로팅 중인지 보여주는 화면 제목을 어떻게 추가했는지 알고 싶습니다. – Maryam
나는 그것을 지금 고쳤다. 동일한 루프 카운터가 사용 되었기 때문에 표시되지 않았지만 이제는 변경 했으므로 잘 작동합니다. 정말 고마워! – Maryam
@Maryam 각 루프의 'plot()'호출에'main = paste ("Screen", i)'를 추가하여 각 작은 플롯에 화면 번호를 표시 할 수 있습니다. 예 :'plot (PC_EPS $ x, col = c (rep ("red", f * Nums), rep ("blue", f * Nums), 메인 = paste ("Screen", i))' –