首页 > 解决方案 > 如何在 R 中可视化多个轨迹?

问题描述

我正在尝试使用 R 可视化虚拟房间中多个参与者的轨迹。我有一个参与者从右侧(黑色方块)进入并向左移动,那里有一个出口门(红色方块)。有时在房间中间(圆圈)有一个障碍物,参与者绕过它,移动到障碍物的左侧(即图表的下半部分)或障碍物的右侧(那将是图表的上半部分)。在下面的示例中,参与者移动到障碍物的左侧以避开它。

library(shape)
# black line continuous
pos_x <- c(5.04,4.68,4.39,4.09,3.73,3.37,3.07,2.77,2.47,2.11)
pos_z <- c(0.74,0.69,0.64,0.60,0.56,0.52,0.50,0.50,0.50,0.51)
df1 <- cbind.data.frame(pos_x,pos_z)
x.2 <- df1$pos_x
z.2 <- df1$pos_z
plot(x.2,z.2,type="l", xlim=range(x.2), ylim=c(-1,3.5), xlab="x", ylab="z", main = "jagged trajectory using LINES function")
filledrectangle(wx = 0.2, wy = 0.2,col = "black", mid = c(5.16, 1), angle = 0)
filledrectangle(wx = 0.2, wy = 0.2,col = "red", mid = c(2, 1), angle = 0)
plotcircle(mid = c(3.4, 1), r = 0.05)

一条轨迹的可视化

为了在同一张图上可视化多个参与者的轨迹(即多条线),我使用函数plot来设置绘图本身(和第一条线),然后我使用函数线添加其他轨迹。

这种设置通常效果很好,但我对功能线有疑问。当参与者从房间的左侧穿过房间到右侧或反之亦然(即从图表的底部到图表的顶部,反之亦然)时,我有一个伪影,一条锯齿线(见下面的红线。)

# adding a red line (jagged) to the plot above
pos_x <- c(4.93,4.58,4.29,4.00,3.66,3.52,3.59,3.72,3.76,3.67)
pos_z <- c(0.42,0.33,0.25,0.17,0.20,0.52,0.80,1.14,1.44,1.72)
df2 <- cbind.data.frame(pos_x,pos_z)
x.3 <- df2$pos_x
z.3 <- df2$pos_z
lines(x.3[order(x.3)], z.3[order(x.3)], xlim=range(x.2), ylim=c(-1,3.5), pch=16, col="red")

锯齿状红线的可视化

如果我只对那条线使用函数“绘图”,那么轨迹就会正确(见下面的红线。)

# red line continuous
pos_x <- c(4.93,4.58,4.29,4.00,3.66,3.52,3.59,3.72,3.76,3.67)
pos_z <- c(0.42,0.33,0.25,0.17,0.20,0.52,0.80,1.14,1.44,1.72)
df2 <- cbind.data.frame(pos_x,pos_z)
x.3 <- df2$pos_x
z.3 <- df2$pos_z
plot(x.3,z.3,type="l", xlim=range(x.2), ylim=c(-1,3.5), xlab="x", ylab="z",col="red", main = "smooth trajectory using PLOT function")
filledrectangle(wx = 0.2, wy = 0.2,col = "black", mid = c(5.16, 1), angle = 0)
filledrectangle(wx = 0.2, wy = 0.2,col = "red", mid = c(2, 1), angle = 0)
plotcircle(mid = c(3.4, 1), r = 0.05)

平滑红线的可视化

我想知道您是否认为有一种方法可以使用这些功能使线条更平滑,通过调整一些参数,或者是否应该使用其他功能。我不得不说,当我处理绘图时,我(仍然)主要在基础 R 中工作,但如果需要,我欢迎 ggplot 中的解决方案。或者您对如何可视化轨迹有任何其他想法或资源?

标签: rggplot2plotgraph

解决方案


正如 Allan Cameron 在评论中指出的那样,只需要简单地[order(x.3)]从 afterx.3z.3call to 中删除lines

固定的线


推荐阅读