2012-04-23 37 views
60

Tôi đang cố gắng để có được các nhãn trục x được xoay 45 độ trên một barplot không có may mắn. Đây là mã tôi có dưới đây:Xoay x trục nhãn trong R cho barplot

barplot(((data1[,1] - average)/average) * 100, 
     srt  = 45, 
     adj  = 1, 
     xpd  = TRUE, 
     names.arg = data1[,2], 
     col  = c("#3CA0D0"), 
     main  = "Best Lift Time to Vertical Drop Ratios of North American Resorts", 
     ylab  = "Normalized Difference", 
     yaxt  = 'n', 
     cex.names = 0.65, 
     cex.lab = 0.65) 

Trả lời

45

edited trả lời mỗi câu trả lời của David:

Dưới đây là một loại cách hackish. Tôi đoán có một cách dễ dàng hơn. Nhưng bạn có thể chặn nhãn thanh và văn bản cốt truyện của nhãn bằng cách lưu các vị trí thanh từ barplot và thực hiện một chút chỉnh sửa lên và xuống. Dưới đây là một ví dụ với các thiết lập mtcars dữ liệu:

x <- barplot(table(mtcars$cyl), xaxt="n") 
labs <- paste(names(table(mtcars$cyl)), "cylinders") 
text(cex=1, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45) 
+0

_caveat_: Nếu bạn đang sử dụng 'bên cạnh = TRUE', có thể bạn sẽ muốn sử dụng' colMeans (x) 'thay vì chỉ' x' nếu bạn chỉ muốn một nhãn cho mỗi nhóm. – MichaelChirico

23

Nếu bạn muốn xoay nhãn trục x với góc bằng hoặc nhỏ hơn 90, hãy thử các phương pháp sau đây:

Nó sử dụng lập luận của barplot space=1 để làm chiều rộng của cột bằng không gian khoảng của các cột.

Bằng cách này, có thể điều chỉnh mã được cung cấp trong R FAQ được xác định bởi @BenBarnes theo câu trả lời của Tyler Rinker.

par(mar = c(7, 4, 2, 2) + 0.2) #add room for the rotated labels 

#use mtcars dataset to produce a barplot with qsec colum information 
mtcars = mtcars[with(mtcars, order(-qsec)), ] #order mtcars data set by column "qsec" (source: http://stackoverflow.com/questions/1296646/how-to-sort-a-dataframe-by-columns-in-r) 

end_point = 0.5 + nrow(mtcars) + nrow(mtcars)-1 #this is the line which does the trick (together with barplot "space = 1" parameter) 

barplot(mtcars$qsec, col="grey50", 
     main="", 
     ylab="mtcars - qsec", ylim=c(0,5+max(mtcars$qsec)), 
     xlab = "", 
     space=1) 
#rotate 60 degrees, srt=60 
text(seq(1.5,end_point,by=2), par("usr")[3]-0.25, 
    srt = 60, adj= 1, xpd = TRUE, 
    labels = paste(rownames(mtcars)), cex=0.65) 

enter image description here

154

sử dụng tham số tùy chọn las = 2.

barplot(mytable,main="Car makes",ylab="Freqency",xlab="make",las=2) 

enter image description here

+0

hoàn toàn hoạt động. cảm ơn –

+1

Tôi tin rằng đây phải là câu trả lời được chấp nhận. Hoạt động hoàn hảo bằng cách sử dụng tham số của hàm barplot cơ sở được sử dụng trong câu hỏi. – jwhaley58

+0

Đồng ý, đây phải là câu trả lời được chấp nhận. Giải pháp ngắn gọn hơn nhiều – snlan

1

câu trả lời Andre Silva của hoạt động tuyệt vời đối với tôi, với một caveat trong "barplot" dòng:

barplot(mtcars$qsec, col="grey50", 
    main="", 
    ylab="mtcars - qsec", ylim=c(0,5+max(mtcars$qsec)), 
    xlab = "", 
    xaxt = "n", 
    space=1) 

Thông báo các "xaxt" tranh cãi. Nếu không có nó, các nhãn được rút ra hai lần, lần đầu tiên mà không có độ quay 60 độ.

0

Bạn chỉ có thể vượt qua khung dữ liệu của bạn vào chức năng sau:

rotate_x <- function(data, column_to_plot, labels_vec, rot_angle) { 
    plt <- barplot(data[[column_to_plot]], col='steelblue', xaxt="n") 
    text(plt, par("usr")[3], labels = labels_vec, srt = rot_angle, adj = c(1.1,1.1), xpd = TRUE, cex=0.6) 
} 

Cách sử dụng:

rotate_x(mtcars, 'mpg', row.names(mtcars), 45) 

enter image description here

Bạn có thể thay đổi góc xoay của các nhãn khi cần thiết.

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