在R中绘制线段

3
我有一些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.

我得到了下面的图表,这正是我想要的。 好线条 那么,有人能解释一下第一个示例与第二个示例之间的不同之处吗?是否有一种方法可以在一行内完成所有操作,而无需逐步进行或编写循环函数?
1个回答

9
您要查找的是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


太好了。这实际上是两个解决方案。我没有意识到我可以在设置图形时使用“NA”(如果你注意到我有一个多余的点在0,0,这样就有东西可以放置线段)。这让我不必回去删除那个点。不过,如果有人能告诉我为什么我的第一个版本绘制出如此奇怪的东西,我仍然想知道原因... - noLongerRandom
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Spacedman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接