как построить диаграмму рассеяния xy с двумя объектами временных рядов разной длины и разной частоты, используя ggplot2

У меня есть несколько объектов временных рядов, охватывающих разные периоды времени, с пробелами в данных и с разной частотой (некоторые ежечасные данные, некоторые 15-минутные, некоторые 1-минутные).

Я пытаюсь сопоставить разные объекты временных рядов друг с другом на диаграммах рассеяния xy, чтобы увидеть, есть ли очевидные корреляции, и сделать «красивые» графики с помощью ggplot для презентации. Очевидно, что можно отображать/сравнивать данные только там, где они существуют для x и y одновременно.

Я могу получить быструю графику с базовой графикой, но хотелось бы чего-то более презентабельного.

например, это работает в базе R:

require(zoo)
x <- zoo(sort(rnorm(10)),as.POSIXct("2013/07/26")+1:10)
y <- zoo(sort(rnorm(30)),as.POSIXct("2013/07/26")+(1:30)/2)
plot(x,y)

и попытка сделать то же самое с ggplot терпит неудачу:

data <- rbind(melt(fortify(x),id="Index"),melt(fortify(y),id="Index"))
ggplot(data,aes(x=x,y=y))+geom_point()
Don't know how to automatically pick scale for object of type zoo. Defaulting to continuous
Don't know how to automatically pick scale for object of type zoo. Defaulting to continuous
Error: Aesthetics must either be length one, or the same length as the dataProblems:x

предложения по улучшению названий/описаний приветствуются


person RyanStochastic    schedule 26.07.2013    source источник
comment
Я в замешательстве, разве вы не имели в виду aes(x=Index,y=value)? x и y не являются переменными в вашем новом фрейме данных, поэтому я не уверен, почему вы пытаетесь сопоставить их с эстетикой.   -  person joran    schedule 26.07.2013
comment
отличное замечание, проблема, вероятно, заключается в правильном форматировании данных для начала. возможно, лучше задать вопрос: «Как подготовить объекты временных рядов разной длины и разной частоты для построения диаграммы рассеяния с помощью ggplot2?»   -  person RyanStochastic    schedule 26.07.2013
comment
Но разве ты не сделал этого? Вы пробовали мое предложение?   -  person joran    schedule 26.07.2013
comment
да, но ваше предложение дает мне график с индексом на оси x и значениями на оси y (два временных ряда, со временем на оси x), я хочу сравнить два, с один временной ряд по оси x, а другой по оси y, как на графике (x, y) в моем примере, который работает   -  person RyanStochastic    schedule 26.07.2013
comment
это приближает меня: b <- cast(data,Index~variable,mean); ggplot(b,aes(x=x,y=y))+geom_point(), но я бы предпочел использовать «идентификацию» вместо «среднее» в качестве функции агрегирования... но по какой-то причине это не удается   -  person RyanStochastic    schedule 26.07.2013
comment
Я думаю, что у доктора Дэна есть потенциальный вариант.   -  person joran    schedule 26.07.2013


Ответы (1)


Что насчет этого:

aaa<-merge(x,y, all=FALSE)
ggplot(aaa,aes(x=x,y=y))+geom_point()    ?
person Doctor Dan    schedule 26.07.2013
comment
Вместо na.omit вы также можете использовать merge(x,y,all=FALSE). - person nograpes; 26.07.2013