循环点()和段()R

循环点()和段()R,r,R,我用笛卡尔坐标系中的线段连接点。我坚持将点循环到线段,这样,如果我想更改点和线段,就不必每次都输入它们的坐标。在这里,for循环可能会有所帮助 x <- -10:10 y <- -10:10 plot(x, y, type = "n", xlab = NA, ylab = NA, axes = FALSE); axis(1, pos = 0, at = seq(-10, 10, by = 1), las=1, cex.axis=0.5) axis(2, pos = 0, at =

我用笛卡尔坐标系中的线段连接点。我坚持将点循环到线段,这样,如果我想更改点和线段,就不必每次都输入它们的坐标。在这里,for循环可能会有所帮助

x <- -10:10
y <- -10:10

plot(x, y, type = "n", xlab = NA, ylab = NA, axes = FALSE);

axis(1, pos = 0, at = seq(-10, 10, by = 1), las=1, cex.axis=0.5)
axis(2, pos = 0, at = seq(-10, 10, by = 1), las=2, cex.axis=0.5)

points(2,1, col = "blue", pch = 20)
points(5,7, col = "blue", pch = 20)
points(-3,8, col = "green", pch = 20)
points(8,3, col = "green", pch = 20)

segments(2, 1, 5 , 7)
segments(-3, 8, 8, 3)

x您正在重复绘制点并绘制连接点的线段的代码。在这些情况下,最好编写一个函数并在需要时调用它

注意函数参数
pcol
,代表
点颜色
段颜色
scol

connectPoints <- function(x, y, pcol, pch = 20, scol = "black"){
  points(x[1], x[2], col = pcol, pch = pch)
  points(y[1], y[2], col = pcol, pch = pch)
  segments(x[1], x[2], y[1], y[2], col = scol)
}

plot(x, y, type = "n", xlab = NA, ylab = NA, axes = FALSE);

axis(1, pos = 0, at = seq(-10, 10, by = 1), las=1, cex.axis=0.5)
axis(2, pos = 0, at = seq(-10, 10, by = 1), las=2, cex.axis=0.5)

x1 <- c(2, 1)
y1 <- c(5, 7)
x2 <- c(-3, 8)
y2 <- c(8, 3)

connectPoints(x1, y1, pcol = "blue")
connectPoints(x2, y2, pcol = "green")

connectPoints使用该功能分割任何需要的点:

myplot<-function(x1=sample(20),y1=sample(20),axis_range=20){
  x <- -axis_range:axis_range
  y <- -axis_range:axis_range

  plot(x, y, type = "n", xlab = NA, ylab = NA, axes = FALSE);

  axis(1, pos = 0, at = seq(-axis_range, axis_range, by = 1), las=1, cex.axis=0.5)
  axis(2, pos = 0, at = seq(-axis_range, axis_range, by = 1), las=2, cex.axis=0.5)
  cols<-sample(colors(),ceiling(length(x1)/2))
  for (i in 1:length(x1)) {
    points(x1[i],y1[i],col = cols[ceiling (i/2)], pch = 20)

  }
  for (j in 1:floor((length(x1)/2))) {
    segments(x1[(2*(j-1))+1],y1[(2*(j-1))+1],x1[2*j],y1[2*j])
  }

}
myplot(x1=sample(20),y1=sample(20),axis_range=20)

myplot谢谢您的帮助!您知道如何确定轴的刻度大小吗?刻度宽度始终根据打印大小进行调整。这使得识别垂直线变得很困难。@ivo您可以将参数tcl
的记号长度设置为文本行高度的一小部分。默认值为-0.5
。参见
help(“par”)
@ivo我还在调用
segments
时添加了参数
col
。这是一个
connectPoints
函数参数,但我忘了在函数体中使用它。对不起,我不清楚我的术语。我的意思是横坐标和纵坐标总是有相同的长度单位,并且彼此一致。我想固定的长度,即使绘图大小改变。我注意到,如果绘图的纵横比发生变化,它会自动调整为绘图大小。我想关闭它。@ivo我认为这是不可能的,记号的长度是文本行高度的一小部分,因此如果调整了绘图的大小,文本行也将如此。