一种在R中旋转绘图的方法

时间:2013-08-26 08:57:06

标签: r plot rotation

根据Google的说法,在R中旋转绘图(使用以下旋转设置)似乎是不可能的。

所以我正在寻找一种方法来做到这一点,但直到现在仍然没有成功。

旋转设置:

  • 旋转中心是绘图的原点({0,0})
  • 给定的角度是y轴和曲线之间的角度。

这是一个代码

  • a取决于角度和x轴长度。 (我认为)
  • b取决于角度和y轴长度。 (我认为)

speed <- cars$speed
dist <- cars$dist
plot(speed,dist, xlim=c(0,121), ylim=c(0,121))


xTemp <- speed
speed <- speed + (a)
dist <- dist + (b)

par(new=TRUE)
plot(speed,dist, xlim=c(0,121), ylim=c(0,121), col="red")

ab值有什么看法?

这是一个代码,其中绘图从y轴旋转约50 度(请注意,这不是真正的旋转。speed值在旋转后延长..我现在不怎么解决它。):

speed <- cars$speed
dist <- cars$dist
plot(speed,dist, xlim=c(0,121), ylim=c(0,121))


xTemp <- speed
speed <- speed + dist
dist <- dist - xTemp

par(new=TRUE)
plot(speed,dist, xlim=c(0,121), ylim=c(0,121), col="red")

It gives :

2 个答案:

答案 0 :(得分:8)

只需应用rotation matrix 对你的数据。

angle <- pi/3
M <- matrix( c(cos(angle), -sin(angle), sin(angle), cos(angle)), 2, 2 )
plot( as.matrix(cars[,c("speed","dist")]) %*% M )

在另一个例子中可能会更清楚:

library(mlbench)
d <- mlbench.smiley()$x
op <- par(mfrow=c(1,2))
plot(d, asp=1)
plot(as.matrix(d) %*% M, col="red", asp=1)
par(op)

Rotation

答案 1 :(得分:0)

看起来我找到了解决方案:

speed <- cars$speed
dist <- cars$dist
angle <- 45
plot(speed,dist, xlim=c(-121,121), ylim=c(-121,121))
speed1 <- double(); dist1=double()
for(i in 1:length(speed)){
    sq <- sqrt((speed[i]*speed[i]) + (dist[i]*dist[i]))
    angleInit <- (180*atan(dist[i]/speed[i]))/pi
    angle2 <- angleInit - angle
    speed1[i] <- cos(pi*angle2/180) * sq
    dist1[i]  <- sin(pi*angle2/180) * sq
}
par(new=TRUE)
plot(speed1,dist1, xlim=c(-121,121), ylim=c(-121,121), col="red")

谢谢