2013-08-26 5 views
0

Поворот сюжета (с настройкой ниже вращения) кажется невозможным в R в соответствии с Google.Способ поворота графика в R

Так что я ищу способ сделать это, но до сих пор не добился успеха.

настройки вращения:

  • Центр вращения является началом участка ({0,0})
  • Данный угол будет угол между осью у и участка.

Вот код, где

  • a что-то в зависимости от угла и х длины оси. (Думаю)
  • 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") 

Любая идея a и b ценности?

Вот, например, код в Wich сюжет поворачивается на около 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 :

+0

ли вам хотите повернуть wh оле, включая оси, или только точки, которые нанесены на график? –

+0

Только сюжет. Не оси – David

+0

Это неясно. Можете ли вы сделать снимок того, что вы хотите сделать? – Spacedman

ответ

6

Просто нанесите 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

+0

Спасибо, но это не совсем то, что я хочу сделать. Я редактировал свой вопрос. – David

+1

Это на самом деле то же самое: Ваш пример - поворот угла -pi/4 (45 градусов) , за которым следует умножение на 'sqrt (2)'. Я добавил пример, который делает это яснее. –

+0

Проблема вашего примера в том, что центр вращения не является началом графика, который является {0,0}. Я хочу превратить свой сюжет вокруг его происхождения. – David

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") 

Спасибо

Смежные вопросы