我有一些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
Run Code Online (Sandbox Code Playgroud)
细分不一定是连续的.我的意思是,有时一段的结尾x,y是下一段的起点; 其他时候不是.
所以我尝试绘制它们
lines(c(df$x1, df$x2), c(df$y1, df$y2))
Run Code Online (Sandbox Code Playgroud)
我得到以下内容,这根本不是我想要的.绘制了额外的细分,它们都是连接起来的.这是错的.看起来它正在绘制来自6组起点/终点的11或12段.

现在,我可以一步一步地绘制它们:
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.
Run Code Online (Sandbox Code Playgroud)
我得到了下面的情节,这就是我所追求的.
那么有人可以帮助解释它在第一个实例中发生的事情,使它与第二个实例不同吗?有没有办法在一行中完成所有操作而无需单步执行或编写循环的函数?
该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)
Run Code Online (Sandbox Code Playgroud)
请注意,您必须先设置图表.你可能想做:
> plot(NA, xlim=c(0,100), ylim=c(0,100), xlab="x", ylab="y")
> segments(data$x1, data$y1, data$x2, data$y2)
Run Code Online (Sandbox Code Playgroud)
获得你图中的界限.
