R: Точечная диаграмма данных временных рядов для нескольких точек, ggplot ?, reshape?

У меня есть данные в следующем формате. Столбец V1 представляет интересующее геномное местоположение, а столбцы V4 и V5 - частоты минорных аллелей в два разных момента времени. Я хотел бы сделать простой график рассеяния xy с линией, соединяющей частоту аллеля для каждого конкретного места от момента времени 1 до момента времени 2 (нанесенный на ось y). (Обратите внимание, что на самом деле у меня есть от сотен до тысяч точек данных).

   V1    V2      V3          V4          V5
1 153 1/113   1/115 0.008849558 0.008695652
2 390 0/176 150/152 0.000000000 0.986842105
3 445 1/149   1/152 0.006711409 0.006578947
4 507 0/154 144/146 0.000000000 0.986301370
5 619 1/103  99/101 0.009708738 0.980198020
6 649 0/138 120/123 0.000000000 0.975609756

Я чувствую, что смогу сделать это с помощью ggplot, но я не уверен, как это сделать, поскольку я не знаю, как указать два значения y для каждой позиции генома или указать столбец в качестве категории . Я подозреваю, что данные нужно как-то изменить. Любая помощь или предложения приветствуются!


Обновлять:

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

Я успешно сгенерировал сюжет, который хотел создать, с помощью следующего кода:

ggplot (dat) + geom_segment (aes (x = "timepoint 1", y = V4, xend = "timepoint2", yend = V5))

и вот как выглядит график с большим количеством точек данных ...

allelefreqtrajectories

Я еще не менял названия осей и не играл с полями, но это общая идея!


person ONeillMB1    schedule 08.11.2013    source источник
comment
Поскольку вы новичок в SO, пожалуйста, найдите время, чтобы прочитать о Stackoverflow и что спросить. Как вы найдете в этих двух ссылках, вы должны показать свою работу, а вопросы, запрашивающие код, должны включать в себя попытки решения, почему они не сработали. Спасибо за небольшой фиктивный набор данных!   -  person Henrik    schedule 09.11.2013
comment
На самом деле это не похоже на то, что большинство людей назвали бы временными рядами.   -  person IRTFM    schedule 09.11.2013


Ответы (3)


Если данные вашего примера были в DF, тогда

ggplot(DF) +
  geom_segment(aes(x=V4, y="timepoint 1", xend=V5, yend="timepoint 2"))

введите описание изображения здесь

person Brian Diggs    schedule 08.11.2013
comment
Спасибо! Я собираюсь поиграть с этим завтра и доложу, если он сделает то, что я, послезавтра. Я никогда не использовал geom_segment (), поэтому я рад попробовать это! - person ONeillMB1; 11.11.2013
comment
Это прекрасно работает! Я перевернул оси и нанес на график все точки данных. У меня есть один набор данных с тремя временными точками, так что теперь я буду играть с geom_path или geom_line, похоже. Спасибо, что поделились информацией об этих функциях / уровнях ggplot. - person ONeillMB1; 12.11.2013

Это не совсем понятно из вопроса, но я думаю, что это то, что вам нужно:

ggplot(d, aes(x=V1, y=V4, ymin=V4, ymax=V5)) 
  + geom_linerange() 
  + xlab('Genomic location') 
  + ylab('Minor allele frequency')

Документы: http://docs.ggplot2.org/current/geom_linerange.html

введите описание изображения здесь

person Rik Smith-Unna    schedule 08.11.2013
comment
Спасибо за предложение! Я собираюсь изучить geom_linerange (), так как это может помочь мне в том, что мне нужно. На самом деле я хочу, чтобы временные точки были по оси X (местоположение генома просто служит переменной для хранения частоты аллелей в двух разных временных точках). - person ONeillMB1; 11.11.2013

with(dat, plot(x=V1, y=V5, ylim=c(0,1) ,type='n',
      xaxt="n", ylab="Allele Frequency", xlab="Genomic Location"))
with(dat, axis(1, V1,V1, cex.axis=0.7)   )
with( dat, arrows(x0=V1,x1=V1+10, y0=V4, y1=V5) )

Вы можете очистить надписи и настроить цвета и функции стрелок:

?arrows

введите описание изображения здесь

person IRTFM    schedule 08.11.2013
comment
Спасибо за предложение. Я на самом деле хочу иметь временные точки в качестве оси x (местоположение генома - это просто то, как я сохраняю частоты аллелей в разные моменты времени). У меня не будет возможности поиграть с кодом до завтра или во вторник, но я сообщу, как только это сделаю. - person ONeillMB1; 11.11.2013
comment
Вы не сможете получить рабочие примеры, если не включите в свои данные значения времени. - person IRTFM; 11.11.2013