2012-08-01 34 views
9

Tôi cần phải tìm cách để chú thích một dòng tham chiếu ở cùng một góc với dòng tham chiếu.Cách chú thích một dòng tham chiếu ở cùng một góc với dòng tham chiếu?

Tuyên bố sau sẽ tạo dòng tham chiếu và nhãn phía trên nó. Tuy nhiên, độ dốc của đường có thể thay đổi và tôi cần phải tìm cách đảm bảo chú thích luôn ở cùng một góc.

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

enter image description here

Có một cách đơn giản để làm điều đó trong R? Cảm ơn trước

Trả lời

13

Một cách là bằng cách thiết lập tỉ lệ cốt truyện, sử dụng đối số asp, và sau đó để tính toán các góc bằng cách sử dụng quy định 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

Thiết lập một khác nhau 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

Một giải pháp tương tự với 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

Tôi đã thử một giải pháp tương tự nhưng không thể làm việc. FYI, Mã của bạn không hoạt động trên máy của tôi - nhãn không có độ dốc giống như đường kẻ. – Andrie

+0

Andrie, câu trả lời này không bỏ lỡ điểm của bạn về tỷ lệ co? –

+0

Tôi không điều chỉnh vị trí thực tế của nhãn ở cả hai ô nhưng góc không phù hợp với đường chuẩn. – Maiasaura

8

Một phụ lục @ câu trả lời Andrie của: ngay cả nếu bạn không tự đặt par("asp"), bạn có thể phục hồi tỷ lệ khung hình làm việc hiện tại với chức năng sau:

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

Vì vậy, bạn có thể tạo cốt truyện của mình: đặt asp <- getCurrentAspect(); và tiếp tục với phần còn lại của giải pháp @ Andrie.

Đối với tất cả, tôi biết chức năng này tồn tại ở đâu đó trong hệ sinh thái R, nhưng tôi chưa thấy ...

+0

Ah, cảm ơn. Tôi faffed khoảng năm phút với 'par (" usr ")' nhưng không thể tìm thấy bất cứ điều gì hữu ích. – Andrie

+0

Cảm ơn bạn rất nhiều !!!Tôi đã hy vọng có một cách để tránh tính toán góc nhưng điều này cũng hoạt động. Cảm ơn –

Các vấn đề liên quan