2013-09-07 38 views
7

làm thế nào bạn có thể xoay nhãn của trục x cho ô trong r? Tôi biết mã nào để sử dụng nhưng tôi không thể áp dụng mã đó:r boxplot nghiêng nhãn x trục

text(**????**, par("usr")[3] - 0.25, srt = 45, adj = 1, labels = labels, xpd = TRUE) 

Biến nào tôi có dấu hỏi? Tôi tạo ra boxplot này:

enter image description here

sử dụng mã này:

soil=read.csv("soil_temp_boxplot.csv", header=TRUE, sep=";")  
tiff("soil_boxplot.tiff") 
par(mar=c(5.5,3.5,0.5,0.5)) 
labels<-paste(c("RB-GL830-[16]-10","RB-GL830-[16]-30", "SB-GL834-[11]-10","SB-GL834-[11]-30", "RB-GL843-[17]-10","RB-GL843-[17]-30","SB-GL864-[12]-10","SB-GL864-[12]-30","SB-GL989-[10]-30", "RB-F844-[18]-10", "RB-F844-[18]-30", "SBB-F-864-[14]-10","SB-F991-[13]-10", "SB-F991-[13]-30")) 
boxplot(soil$rb.gl.10.830.16, soil$rb.gl.30.830.16, soil$sb.gl.10.834.11, soil$sb.gl.30.834.11, soil$rb.gl.10.843.17, soil$rb.gl.30.843.17, soil$sb.gl.10.864.12, soil$sb.gl.30.864.12, soil$sb.gl.30.989.10, soil$rb.f.10.844.18, soil$rb.f.30.844.18, soil$sbb.f.10.864.14, soil$sb.f.10.991.13, soil$sb.f.30.991.13, yaxt="n", col=c("darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","burlywood2","burlywood4","burlywood2","burlywood2", "burlywood4")) 
axis(1, labels = TRUE) 
axis(2, c(0, 8, c(1, 2, 3, 4, 5,6,7)), las=1) 
text(labels, par("usr")[3] - 0.25, srt = 45, adj = 1, labels = labels, xpd = TRUE) 
mtext(2, text="Soil Temperature [°C]", line=2.2) 
mtext(1, text="Location", line=4.5) 
dev.off() 

Trả lời

10

Một thay thế sau gốc text biểu hiện của bạn:

par(mar=c(6, 4.1, 4.1, 2.1)) 

labels <- paste(c("RB-GL830-[16]-10", 
        "RB-GL830-[16]-30", 
        "SB-GL834-[11]-10", 
        "SB-GL834-[11]-30", 
        "RB-GL843-[17]-10", 
        "RB-GL843-[17]-30")) 

boxplot(count ~ spray, data = InsectSprays, 
     col = "lightgray", xaxt = "n", xlab = "") 

# x axis with ticks but without labels 
axis(1, labels = FALSE) 

# Plot x labs at default x position 
text(x = seq_along(labels), y = par("usr")[3] - 1, srt = 45, adj = 1, 
    labels = labels, xpd = TRUE) 

Tại sao sử dụng x = seq_along(labels) cho các vị trí nhãn? x trong text là một vectơ tọa độ nơi đặt nhãn. Nếu bạn nhìn vào ?boxplot, bạn thấy đối số at là một "số vector cho các vị trí nơi ô được vẽ [...]; mặc định là 1: n trong đó n là số hộp." Vì chúng tôi chưa chỉ định đối số at trong cuộc gọi boxplot, mặc định "1: n vị trí" sẽ được sử dụng. Số lượng hộp là tất nhiên số cấp độ của biến giải thích của bạn, mà @Josh O'Brien sử dụng trong câu trả lời của mình. Để hiển thị cho bạn một giải pháp thay thế, tôi đã sử dụng vectơ nhãn tùy chỉnh của bạn thay thế (tất nhiên phải có cùng độ dài với số lượng các mức yếu tố). seq_along tạo chuỗi thường xuyên từ 1 đến length đối số, tương ứng với các vị trí "mặc định là 1: n" at.

Ghi chú phụ: dữ liệu của bạn có định dạng 'rộng'. Trong nhiều trường hợp trong R, sẽ thuận tiện hơn nếu có dữ liệu theo định dạng 'dài'. Trong hàm plot, sau đó bạn chỉ cần chỉ định biến x (ví dụ: vị trí) và biến y (ví dụ: nhiệt độ đất), thay vì chỉ định dữ liệu cho từng cấp độ x. enter image description here

+0

Cảm ơn Henrik! đã làm việc hoàn hảo – samjam

+0

Thật tuyệt khi nghe rằng @samjam! Vui lòng xem chú thích nhỏ của tôi về định dạng dữ liệu của bạn trong câu trả lời được cập nhật của tôi. – Henrik

2

Nhìn vào chức năng staxlab trong gói lôgic, nó làm cho điều này (và một thay thế) khá thẳng về phía trước.

+0

@Henrik, tôi tin rằng câu trả lời của tôi giải quyết "vấn đề chính" của OP, nhưng tôi không đồng ý rằng vấn đề chính cũng giống như câu hỏi cụ thể về cách xác định tọa độ x của nhãn (mà tôi thừa nhận câu trả lời không giải quyết). Vẻ đẹp của một diễn đàn như thế này là nhiều câu trả lời có thể giải quyết các câu hỏi chính cũng như ngụ ý và các câu hỏi khác có liên quan mà có thể được quan tâm đến OP và những người tìm kiếm trong tương lai. Tôi cũng không nhìn đồng hồ của tôi và nói "có" khi được hỏi "bạn có biết thời gian đó không?". –

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