首页 > 解决方案 > 将序列转换为 R 中的图

问题描述

假设我有一些由 2 个数字组成的序列:

seq <- c(0, 1, 1, 1, 0, 0)

假设我想通过以下方式将其绘制成图表:

我的图 (x, y) 从 (0, 0) 开始,并且有一条直线到 (1, 0)。然后,序列开始起作用:如果数字是 0,我以 1 坐标向左转,如果数字是 1,我以 1 坐标向右转。因此,对于示例序列,我从以下内容开始:

(0, 0) -> (1, 0) -> (1, 1) -> (1, 2) -> (1, 1) -> (1, 0) etc.

如果你想清楚我所说的左转和右转是什么意思,最好画这个。

我如何将这些点纳入情节?有小费吗?

绘制序列示例: 在此处输入图像描述

标签: rplot

解决方案


x = c(0, 1, 1, 1, 0, 0)
m = cbind(x = c(0, 1),
          y = c(0, 0))
flag_xy = 1  #Track whether to add to x- or y- coordinate
for (i in x){
    flag_direction = diff(tail(m, 2))  #Track which way the line is facing
    if (i == 0){
        if (flag_xy == 1){
            m = rbind(m, tail(m, 1) + c(0, flag_direction[,1] * 1))
        } else{
            m = rbind(m, tail(m, 1) + c(flag_direction[,2] * -1, 0))
        }
        flag_xy = flag_xy * -1
    } else{
        if (flag_xy  == 1){
            m = rbind(m, tail(m, 1) + c(0, flag_direction[,1] * -1))
        } else{
            m = rbind(m, tail(m, 1) + c(flag_direction[,2]* 1, 0))
        }
        flag_xy = flag_xy * -1
    }
}
graphics.off()
plot(m, asp = 1)
lines(m)

在此处输入图像描述

m
#     x  y
#     0  0
#     1  0
#[2,] 1  1
#[2,] 2  1
#[2,] 2  0
#[2,] 1  0
#[2,] 1 -1
#[2,] 2 -1

推荐阅读