2010-08-06 29 views
8

Tôi đang cố gắng thêm mũi tên đánh dấu toạ độ x cụ thể bên dưới trục x trong ô R. Trục x của tôi là tại y = 0 và khi tôi cố gắng sử dụng tọa độ y âm trong arrows, vì vậy các mũi tên sẽ vuông góc với trục x, tôi chỉ nhận được các cạnh của mũi tên được vẽ (mặc dù là một số khoảng trắng, e, g trong đó nhãn x-trục và dấu kiểm được vẽ).Thêm mũi tên bên dưới trục x trong ô R

Trả lời

10

Tùy chọn xpd có thể được sử dụng trong mũi tên để bạn có thể đặt tọa độ nằm ngoài vùng ô và đặt xpd thành TRUE. Ví dụ, giả sử xlim = c (0,10) và ylim = (0,10), và bạn thiết lập các trục x đến 0 thì

arrows(1.4, -1, 1.4, 0, xpd = TRUE) 

vẽ một mũi tên thẳng đứng hướng lên tại trục x tại vị trí 1.4 trên trục đó.

+0

+1 Cảm ơn bạn. Đẹp và đơn giản! –

+0

Tuyệt vời! Cảm ơn rất nhiều! +1 – ECII

+0

Vấn đề duy nhất với cách tiếp cận này là nếu bạn thay đổi kích thước biểu đồ (tôi đang sử dụng Rstudio), các mũi tên sẽ bị rối tung lên. – ECII

3

Bạn có thể làm điều này bằng cách thêm lớp phủ bổ sung, bằng cách gọi par(new=TRUE), với tỷ suất lề giảm. Ví dụ:

plot(1,1) ## start a plot 
opar <- par(new = TRUE, ## add a new layer 
      mar = c(0,0,0,0)) ## with no margins margins 
## set up the plotting area for this layer 
plot(1,1,xlim=c(0,1),ylim=c(0,1),type='n',xlab='',ylab='') 
arrows(0.1,0.05,0.5,0.05) ## add arrow 
par(opar) ## return the plot parameters to their prior values 

Edit: Nếu bạn muốn giữ lại các tọa độ tương tự như trong cốt truyện gốc, bạn phải chọn các giới hạn x và trục y một cách cẩn thận. Đây là minh họa belo:

plot(1,1,xlim=0:1,ylim=0:1) 
arrows(0.1,0.05,0.5,0.05) 
gpar <- par() 
opar <- par(new = TRUE, mar = c(0,0,0,0),xaxs='i',yaxs='i') 

m1 <- (gpar$usr[2] - gpar$usr[1])/(gpar$plt[2] - gpar$plt[1]) 
c1 <- gpar$usr[1] - m1*gpar$plt[1] 
m2 <- (gpar$usr[4] - gpar$usr[3])/(gpar$plt[4] - gpar$plt[3]) 
c2 <- gpar$usr[3] - m2*gpar$plt[3] 
xlim <- c(c1, m1 + c1) 
ylim <- c(c2, m2 + c2) 

plot(1,1,xlim=xlim,ylim=ylim,type='n',xlab='',ylab='') 
arrows(0.1,0.05,0.5,0.05,col='red') 
points(1,1,col='red') 
par(opar) 
+0

+1 Cảm ơn, nhưng làm thế nào tôi có thể vẽ các mũi tên trên một toạ độ x cụ thể trong ô gốc? Trước khi gọi 'par (new = TRUE)', nếu tôi vẽ mũi tên (10,1,20,1) nó sẽ đi từ (10,1) đến (20,1) trong hệ tọa độ đồ thị của tôi; sau khi gọi 'par (new = TRUE)' Tôi cần bằng cách nào đó chuyển đổi tọa độ mới sang tọa độ cũ ... –

+0

Cảm ơn bạn! Tôi nghĩ loại chuyện này khá phổ biến. –

+0

Thực ra, tôi chưa bao giờ phải tự làm. Có lẽ có một cách để làm điều đó. – nullglob