在R中绘制线段

时间:2014-11-28 16:40:58

标签: r plot lines

我有一些x和y坐标,我试图绘制成线段。我从我认为应该起作用的地方得到一些意想不到的行为。

对于每个段,有一组起始坐标(x1,y1)和一组坐标(x2,y2)。它是一个数据框(称为'df'),如下所示:

  x1   y1   x2   y2
34.9 67.9 62.5 68.8
66.8 80.9 58.8 88.4
58.8 88.4 66.0 68.4
64.0 65.8 56.2 62.6
56.2 62.6 56.6 75.3
54.5 70.0 72.9 51.3

细分不一定是连续的。我的意思是,有时一段的结尾x,y是下一段的起点;其他时候不是。

所以我尝试绘制它们

lines(c(df$x1, df$x2), c(df$y1, df$y2))

我得到以下内容,这根本不是我想要的。绘制了额外的细分,它们都是连接起来的。这是错的。看起来它正在绘制来自6组起点/终点的11或12段。

bad plot

现在,我可以一步一步地绘制它们:

lines(c(df$x1[1], df$x2[1]), c(df$y1[1], df$y2[1]))
lines(c(df$x1[2], df$x2[2]), c(df$y1[2], df$y2[2]))
lines(c(df$x1[3], df$x2[3]), c(df$y1[3], df$y2[3]))
Etc.

我得到了下面的情节,这就是我所追求的。 good lines 那么有人可以帮助解释它在第一个实例中发生的事情,使它与第二个实例不同吗?有没有办法在一行中完成所有操作而无需单步执行或编写循环的函数?

1 个答案:

答案 0 :(得分:8)

您正在寻找segments功能:

> data
    x1   y1   x2   y2
1 34.9 67.9 62.5 68.8
2 66.8 80.9 58.8 88.4
3 58.8 88.4 66.0 68.4
4 64.0 65.8 56.2 62.6
5 56.2 62.6 56.6 75.3
6 54.5 70.0 72.9 51.3
> plot(range(data$x1,data$x2), range(data$y1, data$y2),type="n")
> segments(data$x1, data$y1, data$x2, data$y2)

请注意,您必须先设置图表。您可能想要这样做:

> plot(NA, xlim=c(0,100), ylim=c(0,100), xlab="x", ylab="y")
> segments(data$x1, data$y1, data$x2, data$y2)

获得你图中的界限。

segments