Xoay nhãn trục x trong R cho barplot


97

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

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)

Câu trả lời:


60

CÂU TRẢ LỜI ĐÃ ĐƯỢC CHỈNH SỬA MỖI CÂU TRẢ LỜI CỦA DAVID:

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

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)

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

275

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

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

nhập mô tả hình ảnh ở đây


3
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 một tham số của hàm barplot cơ sở được sử dụng trong câu hỏi.
jwhaley58,

1
Đồ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

17
sử dụng par (mar = c (15,4,4,2)) để điều chỉnh lề để các nhãn dọc không bị cắt khỏi hình.
Steven Magana-Zook

24
Cá nhân tôi thích cách tiếp cận này, nhưng nó không trả lời câu hỏi ban đầu của OP: Tôi đang cố gắng để có được những trục x nhãn để được luân chuyển 45 độ trên barplot
arpieb

1
bạn có thể thấy 'make' được bao phủ bởi các nhãn. Làm thế nào để sửa chữa nó?
Filip Bartuzi

30

Xoay nhãn trục x với góc bằng hoặc nhỏ hơn 90 độ bằng cách sử dụng đồ họa cơ sở. Mã điều chỉnh từ Câu hỏi thường gặp về R :

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"

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)

nhập mô tả hình ảnh ở đây



7

Bạn chỉ cần chuyển khung dữ liệu của mình vào hàm 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) 
}

Sử dụng:

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

nhập mô tả hình ảnh ở đây

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


6

Bạn có thể sử dụng ggplot2 để xoay nhãn trục x thêm một lớp bổ sung

theme(axis.text.x = element_text(angle = 90, hjust = 1))

2

Câu trả lời của Andre Silva rất phù hợp với tôi, với một lưu ý ở dòng "barplot":

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

Lưu ý đối số "xaxt". Nếu không có nó, các nhãn được vẽ hai lần, lần đầu tiên không xoay 60 độ.


1

Trong tài liệu về Bar Plots, chúng ta có thể đọc về các tham số bổ sung ( ...) có thể được chuyển cho lệnh gọi hàm:

...    arguments to be passed to/from other methods. For the default method these can 
       include further arguments (such as axes, asp and main) and graphical 
       parameters (see par) which are passed to plot.window(), title() and axis.

Trong tài liệu về các tham số đồ họa (tài liệu về par), chúng ta có thể thấy:

las
    numeric in {0,1,2,3}; the style of axis labels.

    0:
      always parallel to the axis [default],

    1:
      always horizontal,

    2:
      always perpendicular to the axis,

    3:
      always vertical.

    Also supported by mtext. Note that string/character rotation via argument srt to par does not affect the axis labels.

Đó là lý do tại sao vượt qua las=2là câu trả lời đúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.