2013-12-19 3 views
1

Я планирую время начала и окончания регистрации данных. Ниже представлен кадр данных, с которым я работаю, но я подготовил его. По сути, у меня есть 2 цикла, которые проходят через мои данные, ища время начала и окончания каждого цикла создает кадр данных, который затем вставляется в «data raw».Печать точек перекрытия ggplot2 Данные временных рядов

Теперь я хочу, чтобы мой зритель рассказал о том, что время начала и окончания каждого дискретного набора данных и на данный момент просто окрашивает точки, обозначенные как «начало» и «конец» разными цветами, будет достаточным. Честно говоря, хотя я хотел бы сделать этот более причудливый рисунок коробки вокруг набора с выцветшим фоном с чередующимися цветами, если возможно, используя точки, которые я выбрал в качестве углов. Таким образом, первая «стартовая» точка - 1 угол, а первая «конечная» точка - следующий угол. Нет подсказки, что это возможно, хотя я решил, что я выполню, прежде чем побегу.

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

Честно говоря, я чувствую, что это очень простая проблема, вызванная отсутствием понимания того, как ggplot отображает точки или приоритизирует данные.

require(ggplot2) 

dataraw <- structure(list(Time = c(1383817893L, 1383817970L, 1383818010L, 
     1383818080L, 1383818170L, 1383818250L, 1383817923L, 1383818003L, 
     1383818043L, 1383818113L, 1383818203L, 1383818286L, 1383817890L, 
     1383817893L, 1383817896L, 1383817899L, 1383817902L, 1383817905L, 
     1383817908L, 1383817911L, 1383817914L, 1383817917L, 1383817920L, 
     1383817923L, 1383817970L, 1383817973L, 1383817976L, 1383817979L, 
     1383817982L, 1383817985L, 1383817988L, 1383817991L, 1383817994L, 
     1383817997L, 1383818000L, 1383818003L, 1383818010L, 1383818013L, 
     1383818016L, 1383818019L, 1383818022L, 1383818025L, 1383818028L, 
     1383818031L, 1383818034L, 1383818037L, 1383818040L, 1383818043L, 
     1383818080L, 1383818083L, 1383818086L, 1383818089L, 1383818092L, 
     1383818095L, 1383818098L, 1383818101L, 1383818104L, 1383818107L, 
     1383818110L, 1383818113L, 1383818170L, 1383818173L, 1383818176L, 
     1383818179L, 1383818182L, 1383818185L, 1383818188L, 1383818191L, 
     1383818194L, 1383818197L, 1383818200L, 1383818203L, 1383818250L, 
     1383818253L, 1383818256L, 1383818259L, 1383818262L, 1383818265L, 
     1383818268L, 1383818271L, 1383818274L, 1383818277L, 1383818280L, 
     1383818283L, 1383818286L), value = c(4307L, 4748L, 5419L, 4663L, 
     4779L, 4532L, 5539L, 4589L, 5541L, 5403L, 5277L, 5183L, 4246L, 
     4307L, 4368L, 4416L, 4930L, 5417L, 5444L, 5461L, 5485L, 5507L, 
     5520L, 5539L, 4748L, 4730L, 4741L, 4706L, 4717L, 4684L, 4673L, 
     4673L, 4660L, 4651L, 4585L, 4589L, 5419L, 5463L, 5487L, 5510L, 
     5513L, 5535L, 5535L, 5538L, 5532L, 5543L, 5534L, 5541L, 4663L, 
     4632L, 4598L, 4586L, 4577L, 4565L, 4546L, 5316L, 5348L, 5340L, 
     5363L, 5403L, 4779L, 4790L, 4790L, 4779L, 4762L, 4771L, 5249L, 
     5294L, 5286L, 5290L, 5267L, 5277L, 4532L, 4361L, 4327L, 4319L, 
     4307L, 4288L, 4285L, 5098L, 5151L, 5158L, 5163L, 5177L, 5183L 
     ), variable = c("Start", "Start", "Start", "Start", "Start", 
     "Start", "End", "End", "End", "End", "End", "End", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
     "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1" 
     )), .Names = c("Time", "value", "variable"), row.names = c(NA, 
     85L), class = "data.frame") 


    p <- ggplot(dataraw,aes(Time, value,group=variable)) + 
       geom_point(aes(colour=variable)) 

EDIT: Вот предыдущий цикл, который находит «начинается» и «заканчивается», это дублирует данные. Как упоминалось ниже, лучше всего добавить начало и конец как фактор, а не дублировать его и добавить его как переменную.

dataraw <-structure(list(Time = c(1383817890L, 1383817893L, 1383817896L, 
1383817899L, 1383817902L, 1383817905L, 1383817908L, 1383817911L, 
1383817914L, 1383817917L, 1383817920L, 1383817923L, 1383817970L, 
1383817973L, 1383817976L, 1383817979L, 1383817982L, 1383817985L, 
1383817988L, 1383817991L, 1383817994L, 1383817997L, 1383818000L, 
1383818003L, 1383818010L, 1383818013L, 1383818016L, 1383818019L, 
1383818022L, 1383818025L, 1383818028L, 1383818031L, 1383818034L, 
1383818037L, 1383818040L, 1383818043L, 1383818080L, 1383818083L, 
1383818086L, 1383818089L, 1383818092L, 1383818095L, 1383818098L, 
1383818101L, 1383818104L, 1383818107L, 1383818110L, 1383818113L, 
1383818170L, 1383818173L, 1383818176L, 1383818179L, 1383818182L, 
1383818185L, 1383818188L, 1383818191L, 1383818194L, 1383818197L, 
1383818200L, 1383818203L, 1383818250L, 1383818253L, 1383818256L, 
1383818259L, 1383818262L, 1383818265L, 1383818268L, 1383818271L, 
1383818274L, 1383818277L, 1383818280L, 1383818283L, 1383818286L 
), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L 
), .Label = "rawPressure1", class = "factor"), value = c(4246L, 
4307L, 4368L, 4416L, 4930L, 5417L, 5444L, 5461L, 5485L, 5507L, 
5520L, 5539L, 4748L, 4730L, 4741L, 4706L, 4717L, 4684L, 4673L, 
4673L, 4660L, 4651L, 4585L, 4589L, 5419L, 5463L, 5487L, 5510L, 
5513L, 5535L, 5535L, 5538L, 5532L, 5543L, 5534L, 5541L, 4663L, 
4632L, 4598L, 4586L, 4577L, 4565L, 4546L, 5316L, 5348L, 5340L, 
5363L, 5403L, 4779L, 4790L, 4790L, 4779L, 4762L, 4771L, 5249L, 
5294L, 5286L, 5290L, 5267L, 5277L, 4532L, 4361L, 4327L, 4319L, 
4307L, 4288L, 4285L, 5098L, 5151L, 5158L, 5163L, 5177L, 5183L 
), dt = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 47L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 7L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 37L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 57L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
47L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, NA)), .Names = c("Time", 
"variable", "value", "dt"), row.names = c(NA, -73L), class = "data.frame") 

Это кадр данных, который перемещается по петле ниже.

Эти циклы просто вырывают то, что я считаю началом и временем окончания каждого дискретного набора данных. Вместо Rbind точек я должен добавить фактор вместо точки данных.

Start <- data.frame() 

for (i in 2:(length(dataraw[,1])-1)) 
{ 
    if ((i == 2) || (dataraw$dt[i-1] > 3 && dataraw$dt[i]==3)) { 
    Start <- rbind(Start,c(dataraw[i,1],dataraw[i,3])) 

    } 

    {next} 
} 
colnames(Start) <- c('Time','value') 
Start$variable <- paste("Start") 

End <- data.frame() 
for (i in 1:(length(dataraw[,1]))) 
{ 
    if ((dataraw$dt[i] > 3 && dataraw$dt[i-1]==3) || is.na(dataraw$dt[i])==TRUE) { 
    End <- rbind(End,c(dataraw[i,1],dataraw[i,3])) 

    } 

{next} 
} 
colnames(End) <- c('Time','value') 
End$variable <- paste("End") 
Events <- rbind(Start,End) 
dataraw <- dataraw[,1:3] 
dataraw <- rbind(Events,dataraw) 

ответ

1

Я думаю вы можете иметь свои данные в неправильной форме для того, что вы пытаетесь сделать.

Начальные и конечные времена, по-видимому, были созданы как новые точки, а не свойства старых точек? Таким образом, ggplot отображает две точки в одно и то же время и rawPressure1, скрывая цветные.

EDIT: Если в конце вашего цикла вместо использования rbind объединить данные, используйте слияние, а затем избавиться от дополнительных столбцов. Это создает фрейм данных, который содержит точки, их значение и коэффициент, который является «Начало», «Конец» или «Нет». Этот новый фактор можно затем использовать для окраски точек.

Так вместо самой последней строки цикла добавить эти две строки

data <- merge(x = dataraw, y = Events, by = "Time", all.x = T) 
data <- data[,c(1,3,5)] 

Это создаст dataframe с Start/End в качестве атрибута в соответствующее время.

Затем черчения, как и прежде

p <- ggplot(data,aes(Time, rawPressure1))+ 
      geom_point(aes(colour= factor(pos))) 
p 

Figure

+1

Вы правильно в моей проблеме. Это дубликаты данных. Потому что они взяты из всего набора и вырваны с помощью петли. Вместо того, чтобы бросать их, могу ли я просто сделать их фактором в этом процессе? Поскольку это выглядит правильно в том, что я хочу сделать, но я бы предпочел сделать то, что вы предлагаете, и превратить его в свойство, а не в дублируемую точку данных. Я отредактирую свой пост и добавлю образец моего цикла для воспроизводимости. – ZDwhite

+0

Пятно на, надеюсь, код в редактировании помогает? Используя ваш цикл, чтобы получить правильный формат в первую очередь. Если вы добавите еще один столбец в качестве переменной, описывающей, в какой точке каждой точки, вы можете использовать facet_grid, чтобы поместить каждый набор в свой собственный ящик. На данный момент нет четного количества очков, поэтому трудно понять, где именно должны быть ваши комплекты? –

0

, если я верно вас понял (и ваш mainproblem сюжет) вы schould попробовать qplot;

взгляд на этой tutorial

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