#r #ggplot2 #data-visualization #scientific-computing
#r #ggplot2 #визуализация данных #научные вычисления
Вопрос:
Я пытаюсь составить единый график траектории многих частиц из эксперимента по броуновскому движению. Для каждой частицы выполняется пять измерений, всего 10, для компонентов положения x и y.
У меня есть данные в нескольких структурах данных, поскольку я не знаю, какая из них наиболее полезна для достижения цели, к которой я стремлюсь. 1. Все в пределах одного фрейма данных, с моими 5 временными измерениями в x для 16 измеренных частиц, за которыми следуют 16 для компонента y.
- В двух отдельных фреймах данных, один для 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 по этому столбцу.