2015-04-09 7 views
0

Используя следующий код:внахлест участки в R - от зоопарка пакета

library("ggplot2") 
require(zoo) 

args <- commandArgs(TRUE) 
input <- read.csv(args[1], header=F, col.names=c("POS","ATT")) 
id <- args[2] 

prot_len <- nrow(input) 
manual <- prot_len/100 # 4.3 

att_name <- "Entropy" 

att_zoo <- zoo(input$ATT) 
att_avg <- rollapply(att_zoo, width = manual, by = manual, FUN = mean, align = "left") 

autoplot(att_avg, col="att1") + labs(x = "Positions", y = att_name, title="") 

С данными:

> str(input) 
'data.frame': 431 obs. of 2 variables: 
$ POS: int 1 2 3 4 5 6 7 8 9 10 ... 
$ ATT: num 0.652 0.733 0.815 1.079 0.885 ... 

я: enter image description here Я хотел бы загрузить input2 который имеет различную длину (поэтому по-разному оси x) и перекрывают 2 кривые в одном и том же графике (я имею в виду перекрытие, потому что я хочу, чтобы две кривые имели один и тот же размер графика, поэтому я буду «игнорировать» метки перекрытия и титры), я хотел бы сравните s hape, учитывает длину ввода.

Сначала я пытался генерируя игрушку input2 изменяя manual значение, так что у меня att_avg2, в котором manual равна, например, 7. Между оригиналом autoplot и новым autoplot -2 Я добавляю par(new=TRUE), но это не мой ожидаемый результат. Любой намек на то, как это сделать? Может быть, лучше сохранить att_avg от серии зоопарков до data.frame и не использовать autoplot? Благодаря

UPDATE, ответ Г. Гротендиком:

Если я:

[...] 
att_zoo <- zoo(input$ATT) 
att_avg <- rollapply(att_zoo, width = manual, by = manual, FUN = mean, align = "left") #manual=4.3 
att_avg2 <- rollapply(att_zoo, width = 7, by = 7, FUN = mean, align = "left") 

autoplot(cbind(att_avg, att_avg2), facet=NULL) + 
    labs(x = "Positions", y = att_name, title="") 

Я получаю enter image description here и предупреждающее сообщение: Removed 1 rows containing missing values (geom_path).

ответ

1

par используется с классической графикой , а не для ggplot2. Если у вас есть два зоопарка серии просто cbind или merge серии вместе и autoplot их с помощью facet=NULL:

library(zoo) 
library(ggplot2) 

z1 <- zoo(1:3) # length 3 
z2 <- zoo(5:1) # length 5 

autoplot(cbind(z1, z2), facet = NULL) 

Примечание: вопрос опущен input2 так что могут быть некоторые дополнительные соображения из аспектов не показаны.

enter image description here

+0

Привет, Г. Гротендик, спасибо за Ваш ответ. Я применил ваше предложение, но у меня появился неожиданный сюжет, см. Обновление. – PGreen

+2

У вас, вероятно, есть NA в объекте zb cbind'ed. Его по таким причинам вы должны предоставить полные автономные примеры, которые включают в себя входы. Попробуйте 'autoplot (na.approx (cbind (z1, z2)), facet = NULL)' –

+1

Спасибо, что исправить сюжет. Проблема в том, что реальные данные будут иметь разную длину и разные точки данных, поэтому я сказал, что хотел наложить графики, а если они были прозрачными слайдами, - не пытаясь включить различные кривые в один и тот же сюжет, я 't хочу, чтобы R попыталась совместить 2 кривые с одной и той же осью x. Это возможно? – PGreen

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