2011-11-11 47 views
5

enter image description here Tôi đang có mã như dưới đây. Nhưng tôi không nhận được tất cả các nhãn trục x và nó không hiển thị ở 45 độ khi tôi cố gắng để có điều này trong pdf. Vì tôi mới, Vui lòng giúp tôi sửa tùy chọn này.tất cả các nhãn trục x không hiển thị ở 45 độ

pdf(file="figure.pdf", height=3.5, width=5, onefile=TRUE) 
    Runtime <- c(579,0,581,610,830,828,592,651,596,596,591,581,587,594,604,606,447,434,445) 
    Runtime 
    g_range <- range(0,Runtime) 
    g_range 
    plot(Runtime, type="o", col="blue", ylim=g_range,axes=FALSE, ann=FALSE) 
    lab=c('2011-07-20','2011-08-03','2011-08-10','2011-08-17','2011-08-24','2011-08-25','2011-08-27','2011-08-31','2011-09-07','2011-09-10','2011-09-14','2011-09-21','2011-09-28','2011-10-05','2011-10-06','2011-10-07','2011-10-13','2011-10-19','2011-10-31') 
    box() 
    lab 
    axis(1, at=1:19, lab=F) 
    text(axTicks(1), par("usr")[3] - 2, srt=45, adj=1, labels=lab, xpd=T, cex=0.8) 
    axis(2, las=1, at=500*0:g_range[2]) 
    title(main="Runtime", col.main="red", font.main=4) 
    title(xlab="Build", col.lab=rgb(0,0.5,0)) 
    title(ylab="MS", col.lab=rgb(0,0.5,0)) 
    legend(1, g_range[2], c("AveElapsedTime"), cex=0.8, col=c("blue"), pch=21, lty=1); 
    dev.off() 
+1

Bạn chỉ có thể có chiều dọc hoặc ngang bằng cách sử dụng 'las'. Nếu bạn muốn các nhãn có góc cạnh, bạn phải tự viết chúng bằng cách sử dụng 'văn bản': http://128.97.141.26/stat/R/faq/angled_labels.htm – James

+0

@James err, OP * là *. Xem lệnh 'text()' với 'srt'. –

+0

Rất tiếc! Chỉ cần quét mã và chỉ thấy các cuộc gọi trục. – James

Trả lời

6

Khi tôi chạy mã của bạn, tôi làm không có được hình ảnh bạn hiển thị. Vấn đề là dòng này:

text(axTicks(1), par("usr")[3] - 2, srt=45, adj=1, labels=lab, xpd=T, cex=0.8) 

như axTicks(1) lợi nhuận:

> axTicks(1) 
[1] 5 10 15 

Vì vậy, những gì đang xảy ra là 19 nhãn của bạn đang được vẽ vào những địa điểm.

Nếu bạn muốn âm mưu tại các địa điểm của bọ ve (1:19) thì:

text(1:19, par("usr")[3] - 2, srt=45, adj=1, labels=lab, xpd=T, cex=0.8) 

sẽ làm việc.

Dưới đây là ví dụ đầy đủ dựa trên mã của bạn.

Runtime <- c(579,0,581,610,830,828,592,651,596,596,591,581,587, 
      594,604,606,447,434,445) 
g_range <- range(0,Runtime) 
lab <- c('2011-07-20','2011-08-03','2011-08-10','2011-08-17','2011-08-24', 
     '2011-08-25','2011-08-27','2011-08-31','2011-09-07','2011-09-10', 
     '2011-09-14','2011-09-21','2011-09-28','2011-10-05','2011-10-06', 
     '2011-10-07','2011-10-13','2011-10-19','2011-10-31') 
## plot 
op <- par(mar = c(6,4,4,2) + 0.1) ## bigger bottom margin 
plot(Runtime, type="o", col="blue", ylim=g_range, axes=FALSE, ann=FALSE) 
box() 
axis(1, at=1:19, lab=FALSE) 
text(1:19, par("usr")[3] - 40, srt=45, adj=1.2, labels=lab, xpd=T, cex=0.7) 
axis(2, las=1, at=500*0:g_range[2]) 
title(main="Runtime", col.main="red", font.main=4) 
title(xlab="Build", col.lab=rgb(0,0.5,0), line = 4.5) 
title(ylab="MS", col.lab=rgb(0,0.5,0)) 
legend("topright", c("AveElapsedTime"), cex=0.8, col=c("blue"), pch=21, lty=1) 
## reset par 
par(op) 

Điều này có thể được xử lý tốt hơn sử dụng chức năng trong gói gridBase dù, cho phép lướicơ sở đồ họa để cùng tham gia. Lý do tôi nói nó có thể tốt hơn là bạn có thể chỉ định rằng tọa độ y được đặt theo số lượng dòng thay vì cố gắng tìm ra một giá trị phù hợp cho số liệu y về dữ liệu được vẽ.

Dưới đây là một ví dụ:

## load gridBase 
require(gridBase) 

## do the base plot parts 
op <- par(mar = c(6,4,4,2) + 0.1) ## bigger bottom margin 
plot(1:19, Runtime, type="o", col="blue", ylim=g_range, axes=FALSE, ann=FALSE) 
box() 
axis(1, at=1:19, lab=FALSE) 
axis(2, las=1, at=500*0:g_range[2]) 
title(main="Runtime", col.main="red", font.main=4) 
title(xlab="Build", col.lab=rgb(0,0.5,0), line = 4.5) 
title(ylab="MS", col.lab=rgb(0,0.5,0)) 
legend("topright", c("AveElapsedTime"), cex=0.8, col=c("blue"), pch=21, lty=1) 
## at this point, DO NOT alter the dimensions of the plotting window 

## now do the grid business 
vps <- baseViewports() 
pushViewport(vps$inner, vps$figure, vps$plot) 
## this adds the text 
grid.text(lab, x = unit(1:19, "native"), y = unit(-1, "lines"), 
      just = "right", rot = 60, gp = gpar(cex = 0.7)) 
## this finishes off the viewport - you have to do this or things will go wrong: 
popViewport(3) 
## reset par 
par(op) 

Chú giải này có thể là một chút khó tính trên màn hình, chạy lại ví dụ gridBase vào R của tôi 2.13.2 cài đặt không tạo ra bất kỳ nhãn. Đóng thiết bị và sau đó chạy mã afresh hoạt động mặc dù. Tôi không nghĩ rằng đây sẽ là một vấn đề nếu bạn đang vẽ một thiết bị pdf().

+1

+1 cho '" đứng đầu "" trong chú giải. Tôi thích 'adj = 1.2' cũng như trong' văn bản'; nếu tôi đã tinh chỉnh thêm, tôi sẽ di chuyển nhãn x xuống xa hơn (nó được bao phủ bởi các nhãn đánh dấu) và mở rộng lề để bù lại ... –

+0

@BenBolker Điểm tốt. Tôi đã từ bỏ sự phối hợp với 'y' như tôi đã nhớ có một cách tốt hơn để làm điều này bằng cách sử dụng ** gridBase **. Một ví dụ khác được hiển thị bằng cách sử dụng này thay vì không quan trọng với các tọa độ của người dùng. –

+0

Cảm ơn bạn rất nhiều Gavin .. Nó đang làm việc tuyệt vời .. Cảm ơn bạn Ben, James cho ý kiến ​​của bạn .. – Tamilan

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