我有一个包含4列的小标题:参与者索引,时间戳,x坐标和相应的y坐标(整洁)。它们代表我要绘制的鼠标移动轨迹。请参见以下head
-输出(请注意,R不显示任何小数点,但有)
> head(coordinates_table)
# A tibble: 6 x 4
VP run_timestamp UserCircleXPos UserCircleYPos
<int> <int> <dbl> <dbl>
1 1 0 499. 502.
2 1 1 499. 502.
3 1 2 499. 502.
4 1 3 499. 502.
5 1 4 499. 502.
6 1 5 499. 502.
至少重新创建头部的dput
是
structure(list(VP = c(1L, 1L, 1L, 1L, 1L, 1L), run_timestamp = 0:5,
UserCircleXPos = c(499.120831511463, 499.120831511463, 499.120831511463,
499.120831511463, 499.120831511463, 499.120831511463), UserCircleYPos = c(501.758336977075,
501.758336977075, 501.758336977075, 501.758336977075, 502.344375167638,
502.344375167638)), row.names = c(NA, 6L), class = "data.frame")
使用ggplot2-package中的geom_path
,可以为每个参与者绘制轨迹(使用color aes
来分隔它们)是没有问题的。每个参与者的轨迹图:
但是,我还要绘制一些平滑的平均轨迹。我的第一种方法是使用时间戳作为分组变量来计算每个时间戳的平均值。
library(magritr) # for pipe operator
library(dplyr) # for group_by(), summarise()
library(ggplot2) # for ggplot()
coordinates_table %>%
group_by(run_timestamp) %>%
summarise(mean_x=mean(UserCircleXPos), mean_y=mean(UserCircleYPos)) %>%
ggplot(., aes(x=mean_x, y=mean_y)) +
geom_path() +
scale_y_continuous(limits = c(0, +1000)) +
scale_x_continuous(limits = c(0, +1000)) +
geom_smooth(span = 0.1,se = FALSE)
这是哪个情节:
请注意,在此示例中,我还尝试使用geom_smooth
函数对数据求平均。但是,这会产生与this thread中相同的问题,因为geom_smooth
不能按输入的行顺序工作。我无法使用其他线程的解决方案,因为我的x坐标不是唯一的,因此不能用作分组变量。
每个参与者的每个时间戳的x-y坐标也不相同(有时甚至不接近),因此常规平均值可能不合适。
因此,我正在寻找一种解决方案,以对数据进行平滑处理以绘制干净的平均轨迹图。我以前从未使用过LOESS方法,但是我认为这可能是我想要的。我只需要向正确的方向推进即可。