2012-05-01 10 views
2

Вот мои данные и сюжетмножественным расположение участка на уровне одной переменной в базовом участке в г

nmar <- seq (1, 100, 5) 
position= rep(nmar, 5) 
n = length (nmar) 
chr = rep(1:5, each = n) 

mapdata <- data.frame (chr, position, 
snpname = paste("SNP-", 1:length (position), sep = "")) 
mapdata 


chr.lab = 1 ; mbar.col = "blue" 
layout(matrix(c(1,1,2),nc=1)) # works for two but I need to extend it to 
     n (which is level of chr = 5) 

# plot level 1 
mapdata1 <- mapdata[mapdata$chr == 1,] 
m <- par()$mar 
m[1] <- m[3] <- 0 
par(mar=m) 
# Set the limits of the plot 
plot(mapdata1$position,mapdata1$position-mapdata1$position, type="n", 
    axes=FALSE, 
xlab="", ylab="Chromsome", yaxt="n") 

polygon(
    c(0,max(mapdata1$position + 0.08 * max(mapdata1$position)),max(mapdata1$position)+ 
    0.08 * max(mapdata1$position),0), 
    .2*c(-0.3,-0.3,0.3,0.3), 
    col= mbar.col 
) 
segments(mapdata1$position, -.3, mapdata1$position, .3) 
text(mapdata1$position, -.7, mapdata1$snpname, srt = 90, cex.lab = chr.lab) 
text(mapdata1$position, .7, mapdata1$position,cex.lab = chr.lab) 
text(0, labels = c("Chr 2")) 

Второй уровень

# plot level 2 
mapdata2 <- mapdata[mapdata$chr == 2,] 
m <- par()$mar 
m[1] <- m[3] <- 0 
par(mar=m) 
# Set the limits of the plot 
plot(mapdata2$position,mapdata2$position-mapdata1$position, type="n", axes=FALSE, 
xlab="", ylab="Chromsome", yaxt="n") 

polygon(
    c(0,max(mapdata2$position + 0.08 * max(mapdata2$position)),max(mapdata2$position)+ 
0.08 * max(mapdata2$position),0), 
    .2*c(-0.3,-0.3,0.3,0.3), 
    col= mbar.col 
) 
segments(mapdata2$position, -.3, mapdata2$position, .3) 
text(mapdata2$position, -.7, mapdata2$snpname, srt = 90, cex.lab = chr.lab) 
text(mapdata2$position, .7, mapdata2$position,cex.lab = chr.lab) 
text(0, labels = c("Chr 2")) 

Выход enter image description here

(1) Как можно Я автоматизирую процесс для n уровней - расширяя аналогичный график до n уровней chr (2) Если вы видите, что баризетка с одинаковой спецификацией имеет c повешенное, может быть связано с разной площадью участка. Как я могу настроить его, чтобы сделать все графики одинаковыми?

+0

какой-либо конкретной причины для желающих придерживаться базовых участков? ggplot2 и решетка обеспечивают простое решение для создания таких составных графиков, которые видят эти ссылки для множества примеров. http://learnr.wordpress.com/2009/06/28/ggplot2-version-of-figures-in-lattice-multivariate -data-visualization-with-r-part-1/http://learnr.wordpress.com/2009/06/29/ggplot2-version-of-figures-in-lattice-multivariate-data-visualization-with-r -part-2/http://learnr.wordpress.com/2009/07/02/ggplot2-version-of-figures-in-lattice-multivariate-data-visualization-with-r-part-3/ –

+0

Я согласен что ggplot2 и решетка лучше, однако я чувствую, что их трудно манипулировать, не так ли? – SHRram

+0

Я нахожу ggplot2 довольно простым в использовании, как только вы получите его. Imo явно стоит переключиться на ggplot2 или на решетку, хотя после работы с обоими из них я предпочитаю ggplot2. –

ответ

2

ggplot определенно путь сюда. Но если вы действительно хотите придерживаться базы plot, то эта функция будет работать:

plot.as.stack= function(mapdata1, mbar.col = "blue"){ 
    # mapdata1 <- mapdata[mapdata$chr == chr,] 
    m <- par()$mar 
    m[1] <- m[3] <- 0 
    par(mar=m) 
    # Set the limits of the plot 
    plot(mapdata1$position,mapdata1$position-mapdata1$position, type="n", 
     axes=FALSE, 
    xlab="", ylab="Chromsome", yaxt="n") 

    polygon(
     c(0,max(mapdata1$position + 0.08 * max(mapdata1$position)),max(mapdata1$position)+ 
     0.08 * max(mapdata1$position),0), 
     .2*c(-0.3,-0.3,0.3,0.3), 
     col= mbar.col 
    ) 
    segments(mapdata1$position, -.3, mapdata1$position, .3) 
    text(mapdata1$position, -.7, mapdata1$snpname, srt = 90, cex.lab = chr.lab) 
    text(mapdata1$position, .7, mapdata1$position,cex.lab = chr.lab) 
    text(0, labels = paste("Chr",unique(mapdata1$chr))) 
} 

# Example Run. 
par(mfrow=c(length(unique(mapdata$chr)),1)) 
x=by(mapdata,factor(mapdata$chr),plot.as.stack) # Assigned to x to prevent output 
par(mfrow=c(1,1)) 

Как вы можете видеть, я просто взял код, положить его в функцию, а затем побежал by на него. Обратите внимание, что это запустило бы функцию на всех уровней chr. Вы можете изменить его так, что функция принимает значение ПГО вместо:

plot.as.stack = function(chr){ 
    mapdata1 <- mapdata[mapdata$chr == chr,] 
    ... 
} 

А затем запустить функцию со значениями CHR:

par(mfrow=c(5,1)) 
sapply(1:5,plot.as.stack) 
par(mfrow=c(1,1)) 
+0

Я не могу дождаться, чтобы принять ваш ответ, спасибо !!! – SHRram

 Смежные вопросы

  • Нет связанных вопросов^_^