Создание множества линейных графиков с использованием позиций как функции времени

#r #ggplot2 #data-visualization #scientific-computing

#r #ggplot2 #визуализация данных #научные вычисления

Вопрос:

Я пытаюсь составить единый график траектории многих частиц из эксперимента по броуновскому движению. Для каждой частицы выполняется пять измерений, всего 10, для компонентов положения x и y.

У меня есть данные в нескольких структурах данных, поскольку я не знаю, какая из них наиболее полезна для достижения цели, к которой я стремлюсь. 1. Все в пределах одного фрейма данных, с моими 5 временными измерениями в x для 16 измеренных частиц, за которыми следуют 16 для компонента y.

Единый фрейм данных

  1. В двух отдельных фреймах данных, один для x-компонента и один для y.

Я пытался использовать rbind для создания единого массива, который я могу использовать geom_line (), но это означает, что у меня есть одна единственная линия, где траектории каждой частицы связаны друг с другом.

Как я мог бы создать эти разные линии, все в одной плоскости x-y. Спасибо

Комментарии:

1. Пожалуйста, не делитесь данными с помощью изображений. Включите выборку ваших данных с помощью dput() , и у нас будет больше возможностей помочь.

Ответ №1:

Самый простой способ добиться этого — иметь 3 столбца, один для общего компонента x, один для y и один для частицы. Для этого вам нужно преобразовать ваши данные в длинный формат:

 > df <- data.frame(t=c(1,2,3,4,5), x.1 = c(-1,1,3,4,5), x.2 = c(5,2,1,4,6))
> df
  t x.1 x.2
1 1  -1   5
2 2   1   2
3 3   3   1
4 4   4   4
5 5   5   6
> (df <- tidyr::gather(df, "particle", "y", -t))
   t particle  y
1  1      x.1 -1
2  2      x.1  1
3  3      x.1  3
4  4      x.1  4
5  5      x.1  5
6  1      x.2  5
7  2      x.2  2
8  3      x.2  1
9  4      x.2  4
10 5      x.2  6
  

Затем используйте group параметр to geom_line для их построения по отдельности:

 ggplot(df, aes(x = t, y = y))   geom_line(aes(group = particle, color = particle))
  

Комментарии:

1. Звучало так, как будто OP хочет, чтобы они все были подключены — может geom_step здесь было бы полезно?

2. Вы не можете использовать геометрическую линию, потому что она не учитывает время. Сначала он упорядочивает значения X от min до max, а затем отображает в этом порядке.

Ответ №2:

Сначала вы должны иметь свои данные в этом формате

 data <- data.table(particle = as.factor(rep(1:3, each = 5)),
                   x = sample(-10:10, 15, replace = TRUE),
                   y = sample(-10:10, 15, replace = TRUE))
data

    particle   x   y
 1:        1  -8  -4
 2:        1  -5  -2
 3:        1  -1  -5
 4:        1  -3   9
 5:        1   4  -7
 6:        2   2   1
 7:        2  -8 -10
 8:        2  -4  -8
 9:        2  -6  -4
10:        2  -8  -3
11:        3 -10  10
12:        3   6  -5
13:        3  -5  -6
14:        3  -6   8
15:        3   1  -4
  

Один столбец для идентификации частицы, а другой для позиции в координатах.

Эта ссылка может помочь вам изменить ваши данные: http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format /

Затем просто группируйте график по частицам (используя color aes)

 ggplot(data = data,
       aes(x = x, y = y, color = particle))  
  geom_path(size = 3)
  

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

Если вы хотите изменить порядок следования путей, просто добавьте столбец времени и отсортируйте df по этому столбцу.