如何向散点图中的所有点添加方向(方向/角度/方位角)?

时间:2018-01-20 20:26:23

标签: r orientation

我正在尝试在R中创建一个散点图,其中每个点都有一个箭头或只是一条线,表示“方向”或与该特定点相关的方向。每个点都有不同的方向,但所有的方向线应该是相同的长度。角度范围为0-360度,0为向右,然后从那里逆时针移动。最大的问题是我的轴是对数刻度,x和y轴以不同的速率增加,从而抛出方向。我的数据是一个3x35矩阵,在第三列中有X,Y坐标和我的方向角。

我尝试过使用箭头功能;但是,箭头似乎没有指向正确的方向,它们的长度根据角度而变化。这是我使用的简单代码:

plot(data$SF.X., data$TF.Y.,log="xy", pch=19, cex=0.8,ylim=c(0.031,20), xlim = c(0.031,1))

arrows(data$SF.X., data$TF.Y., x1=data$SF.X.+length*cos(data$Degrees), y1=data$TF.Y.+length*sin(data$Degrees), 
       code = 2, length=0.03, col="Red")

这是上面代码的结果: enter image description here 有人可以指出我正确的方向,如何让我的方向线长度相同,并根据我的第三列中的角度值指向正确的方向?

非常感谢你!

以下是我的数据集示例:

x = c(0.47,0.80,0.09,0.78,0.14)

y = c(2.71,4.51,1.85,5.56,0.98)

orientation (degrees) = c(42.51,9.27,11.31,0.52,93.4)

1 个答案:

答案 0 :(得分:0)

对于角度来说,它很容易,R总是以弧度为角度使用,所以你只需要将度数向量乘以pi/180

对于箭头的长度,它更棘手。由于轴刻度和图像格式存在变形,因此我通过对轴进行归一化,然后更改标签并将图形保存为完美的方形格式来提出解决方法。可能不是最好的解决方案,但它提供了预期的输出。

x = c(0.47,0.80,0.09,0.78,0.14)
y = c(2.71,4.51,1.85,5.56,0.98)
degrees = c(42.51,9.27,11.31,0.52,93.4)

x.norm = (x-min(x))/(max(x)-min(x))
y.norm = (y-min(y))/(max(y)-min(y))
l <- 0.15


png("/home/ubuntu/Downloads/sample.png", width=500, height=500)

par(mar=c(4,4,1,1))
plot(x.norm, y.norm, pch=19, cex=0.8, col="Blue", 
     axes=FALSE, xlab="x", ylab="y", xlim=c(-0.1,1.1), ylim=c(-0.1,1.1))
arrows(x.norm, y.norm, 
       x1=x.norm+l*cos(degrees*pi/180), y1=y.norm+l*sin(degrees*pi/180), 
       length=0.05, col="Gray")
axis(1, at=seq(0,1,0.1), round(seq(min(x),max(x), (max(x)-min(x))/10),1))
axis(2, at=seq(0,1,0.1), round(seq(min(y),max(y), (max(y)-min(y))/10),1))

dev.off()

enter image description here