2011-12-31 17 views
10

Khi tôi tự thêm các nhãn sau với (axis(1, at=1:27, labels=labs[0:27])):R Vẽ Tất cả Axis Labels (Ngăn Một số Từ Being Bỏ qua)

> labs[0:27] 
[1] "0\n9.3%" "1\n7.6%" "2\n5.6%" "3\n5.1%" "4\n5.7%" "5\n6.5%" "6\n7.3%" "7\n7.6%" "8\n7.5%" "9\n7%" "10\n6.2%" "11\n5.2%" 
[13] "12\n4.2%" ........ 

tôi nhận được như sau:

enter image description here

thế nào Tôi buộc tất cả các nhãn được rút ra để 1,3,5,6, và 11 không bị bỏ qua? (Còn, cho tín dụng thêm, làm thế nào để chuyển toàn bộ điều xuống một vài điểm ảnh?)

+0

Bạn có thực sự muốn đưa 0 vào chỉ mục của mình không? –

Trả lời

10

trục nói với bạn rằng:

Mã cố gắng hết sức không để vẽ chồng chéo nhãn đánh dấu, và như vậy sẽ bỏ qua nhãn nơi họ sẽ bỏ hoặc chồng chéo các nhãn được vẽ trước đó. Điều này có thể dẫn đến, ví dụ, mỗi đánh dấu khác được dán nhãn. (The ve được rút trái sang phải hoặc dưới lên trên, và không gian ít nhất là kích thước của một 'm' còn lại giữa nhãn.)

Chơi với cex.axis để các nhãn là đủ nhỏ để phù hợp với không chồng chéo

labs <-c("0\n9.3%","1\n7.6%","2\n5.6%","3\n5.1%","4\n5.7%","5\n6.5%","6\n7.3%", 
     "7\n7.6%","8\n7.5%","9\n7%", "10\n6.2%","11\n5.2%","12\n4.2%",12:27) 
plot(1:27,xaxt = "n") 
axis(side=1, at=1:27, labels=labs[0:27],cex.axis=0.35) 

Nếu bạn mở rộng biểu đồ (bằng cách kéo theo cách thủ công hoặc theo chương trình), bạn có thể tăng kích thước nhãn của mình.

+0

Cảm ơn rất nhiều. cex.axis giúp đỡ rất nhiều –

2

@PLapointe vừa đăng nội dung tôi định nói, nhưng bỏ qua câu trả lời thưởng.

Đặt padj = 0.5 trong axis để di chuyển nhãn xuống một chút.

+2

Cách khác là làm cho các nhãn vuông góc với '' 'lô (..., las = 2)' '' hoặc '' 'mệnh (las = 2); plot (...) '' ' – lukmdo

+0

+1 cho giải pháp xoay trục trước đó. Lưu ý về trường hợp trên, trong trường hợp bạn đang sử dụng 'lô (..., trục = FALSE, ...)' và 'trục (1, ....)', sau đó thêm tùy chọn vào trục: 'trục (1, ..., las = 2) ' – r3x

14

Nếu bạn thực sự muốn để buộc tất cả các nhãn để hiển thị, ngay cả khi họ đang rất gần hoặc chồng chéo, bạn có thể "lừa" R vào hiển thị chúng bằng cách thêm nhãn lẻ và thậm chí trục với các lệnh riêng biệt, như sau:

labs <-c("0\n9.3%","1\n7.6%","2\n5.6%","3\n5.1%","4\n5.7%","5\n6.5%","6\n7.3%", 
     "7\n7.6%","8\n7.5%","9\n7%", "10\n6.2%","11\n5.2%","12\n4.2%",13:27) 
n=length(labs) 
plot(1:28, xaxt = "n") 
axis(side=1, at=seq(1,n,2), labels=labs[seq(1,n,2)], cex.axis=0.6) 
axis(side=1, at=seq(2,n,2), labels=labs[seq(2,n,2)], cex.axis=0.6) 

enter image description here

bạn có thể chơi với cex.axis để có được kích thước văn bản mà bạn muốn. Cũng xin lưu ý rằng bạn có thể phải điều chỉnh số lượng giá trị trong at= và/hoặc labels= sao cho chúng bằng nhau.

Tôi đồng ý với @PLapointe và @joran rằng nói chung tốt hơn là không can thiệp vào hành vi mặc định của R về chồng chéo. Tuy nhiên, tôi đã có một vài trường hợp nhãn trục trông tốt ngay cả khi chúng không hoàn toàn là "m-width" đầy đủ, và tôi nhấn vào mẹo xen kẽ các nhãn lẻ và thậm chí là cách để có được hành vi truy nã.

3

Mặc dù có một số câu trả lời hay ở đây, OP không muốn đổi kích thước nhãn hoặc thay đổi bất kỳ thứ gì về cốt truyện ngoài việc lắp tất cả các nhãn trục. Đó là gây phiền nhiễu, vì thường có vẻ như có rất nhiều phòng để phù hợp với tất cả các nhãn trục.

Đây là một giải pháp khác. Vẽ cốt truyện không có trục, sau đó thêm ve với nhãn trống. Lưu trữ vị trí của các ve trong một đối tượng, vì vậy sau đó bạn có thể đi qua từng vị trí và đặt nó vào đúng vị trí trên trục.

plot(1:10, 1:10, yaxt = "n") axis_ticks = axis(2, axTicks(2), labels = rep("", length(axTicks(2)))) for(i in axis_ticks) axis(2, i)

0

Tôi đã có một vấn đề tương tự mà tôi muốn tách rời các nhãn và nhận được chúng để in mà không làm mất một số. Tôi tạo ra hai bộ ve hiển thị thứ hai bên dưới khác để làm cho nó trông giống như nó staggers.

xaxis_stagger = function(positions,labels) { 
    odd=labels[seq(1,length(labels),2)] 
    odd_pos=positions[seq(1,length(positions),2)] 
    even=labels[seq(2,length(labels),2)] 
    even_pos=positions[seq(2,length(positions),2)] 
    axis(side=1,at=odd_pos,labels=odd) 
    axis(side=1,at=even_pos,labels=even,padj=1.5) 
} 

Vì vậy, bạn cung cấp cho các vị trí nơi bạn muốn ve và nhãn cho những dấu đó và sau đó sắp xếp lại thành hai bộ trục và vẽ chúng trên ô ban đầu. Cốt truyện gốc sẽ được thực hiện với xaxt = "n".

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