【问题标题】:How to visualize multiple trajectories in R?如何在 R 中可视化多个轨迹?
【发布时间】:2020-12-16 12:55:07
【问题描述】:

我正在尝试使用 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 来设置图本身(和第一条线),然后我使用了lines 函数可以在此之后添加其他轨迹。

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

# 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 中的解决方案。或者您对如何可视化轨迹有任何其他想法或资源?

【问题讨论】:

  • 这是因为您是根据它们的 x 值而不是它们发生的时间对坐标进行排序。只需在对 lines 的调用中从 x.3 和 z.3 之后删除 [order(x.3)]
  • 谢谢!那行得通。

标签: r ggplot2 plot graph


【解决方案1】:

正如 Allan Cameron 在评论中指出的那样,只需在对 lines 的调用中删除 x.3 和 z.3 之后的 [order(x.3)] 即可:

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2015-11-29
    • 1970-01-01
    • 2019-10-10
    • 2014-03-26
    • 2018-05-22
    • 2021-08-28
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多