2012-08-01 3 views
9

Potrzebuję znaleźć sposób na opisanie linii odniesienia pod tym samym kątem, co sama linia odniesienia.Jak opisać linię odniesienia pod tym samym kątem, co sama linia odniesienia?

Poniższe zdanie spowoduje wyświetlenie linii odniesienia i etykiety nad nią. Jednak nachylenie linii może się zmienić i muszę znaleźć sposób, aby adnotacja była zawsze pod tym samym kątem.

plot(1:10,1:10) 
abline(a=8, b=-1) 
text(x=4, y=5, "reference line label", srt=-28) 

enter image description here

Czy istnieje prosty sposób to zrobić w R? z góry dzięki

Odpowiedz

13

Jednym ze sposobów jest poprzez ustalenie współczynnika kształtu działki, używając asp argumentu, a następnie obliczyć kąty przy użyciu określonego asp:

asp <- 2 

plot(1:10,1:10, asp=asp) 
abline(a=8, b=-1) 
text(x=4, y=5, "reference line label", srt=180/pi*atan(-1*asp)) 

abline(a=4, b=-2) 
text(x=1, y=3, "reference line label", srt=180/pi*atan(-2*asp)) 

enter image description here

Ustawianie inny asp :

asp <- 0.8 

plot(1:10,1:10, asp=asp) 
abline(a=8, b=-1) 
text(x=4, y=5, "reference line label", srt=180/pi*atan(-1*asp)) 

abline(a=4, b=-2) 
text(x=1, y=3, "reference line label", srt=180/pi*atan(-2*asp)) 

enter image description here

3

Podobne rozwiązanie z ggplot2

data <- data.frame(x = 1:10, y = 1:10) 
intercept <- 10 
slope <- -1 
ggplot(data, aes(x,y)) + geom_point(shape=1) + 
    geom_abline(intercept = intercept, slope = slope) + 
    geom_text(x=4, y=5, label="my label", angle=atan(slope)*180/pi) 

with slope 1

intercept <- 10 
slope <- -2 
ggplot(data, aes(x,y)) + geom_point(shape=1) + 
    geom_abline(intercept = intercept, slope = slope) + 
    geom_text(x=4, y=5, label="my label", angle=atan(slope)*180/pi) 

with slope 2

+0

Próbowałem podobne rozwiązanie, ale nie mógł zmusić go do pracy. FYI, Twój kod nie działa na moim komputerze - etykieta nie ma tego samego nachylenia co linia. – Andrie

+0

Andrie, czy ta odpowiedź nie pomija twojego punktu widzenia odnośnie współczynnika kształtu ?? –

+0

Nie dostosowałem rzeczywistej pozycji etykiety na obu poletkach, ale kąt jest poprawnie dopasowany do linii odniesienia. – Maiasaura

8

aneksu do @ odpowiedź Andrie: nawet jeśli nie ręcznie ustawić par("asp") można odzyskać bieżący działający współczynnik proporcji z następującą funkcją:

getCurrentAspect <- function() { 
    uy <- diff(grconvertY(1:2,"user","inches")) 
    ux <- diff(grconvertX(1:2,"user","inches")) 
    uy/ux 
} 

Aby utworzyć wykres: ustaw asp <- getCurrentAspect(); i kontynuuj z resztą rozwiązania @ Andrie.

Z tego co wiem to funkcja istnieje gdzieś w ekosystemie R, ale nie widziałem go ...

+0

Ah, dziękuję. Przez pięć minut biłem się z 'par (" usr "), ale nie mogłem znaleźć nic przydatnego. – Andrie

+0

Dziękuję bardzo!Miałem nadzieję, że istnieje sposób na uniknięcie obliczania kąta, ale to też działa. Dzięki –

Powiązane problemy