Memutar label sumbu x di R untuk diagram batang

99

Saya mencoba untuk mendapatkan label sumbu x untuk diputar 45 derajat pada barplot tanpa hasil. Ini adalah kode yang saya miliki di bawah ini:

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)
David
sumber

Jawaban:

60

JAWABAN YANG DIEDIT PER RESPONS DAVID:

Ini semacam cara hackish. Saya rasa ada cara yang lebih mudah. Tetapi Anda dapat menekan label batang dan teks plot label dengan menyimpan posisi batang dari barplotdan melakukan sedikit penyesuaian ke atas dan ke bawah. Berikut contoh kumpulan data 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)
Tyler Rinker
sumber
3
peringatan : Jika Anda menggunakan beside = TRUE, Anda mungkin ingin menggunakan colMeans(x)daripada hanya xjika Anda menginginkan hanya satu label per grup.
MichaelChirico
278

gunakan parameter opsional las = 2.

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

masukkan deskripsi gambar di sini

Michael Z
sumber
3
Saya percaya bahwa ini harus menjadi jawaban yang diterima. Bekerja dengan sempurna menggunakan parameter fungsi batang plot dasar yang digunakan dalam pertanyaan.
jwhaley58
1
Setuju, ini harus menjadi jawaban yang diterima. Solusi yang jauh lebih ringkas
snlan
17
gunakan par (mar = c (15,4,4,2)) untuk mengatur margin sehingga label vertikal tidak dipotong dari gambar.
Steven Magana-Zook
24
Saya pribadi lebih suka pendekatan ini, tetapi itu tidak menjawab pertanyaan asli OP: Saya mencoba untuk mendapatkan label sumbu x diputar 45 derajat pada barplot
arpieb
1
Anda bisa melihat 'make' ditutupi oleh label. Bagaimana memperbaikinya?
Filip Bartuzi
31

Putar label sumbu x dengan sudut sama atau lebih kecil dari 90 derajat menggunakan grafik dasar. Kode diadaptasi dari R FAQ :

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)

masukkan deskripsi gambar di sini

Andre Silva
sumber
9

Anda cukup memasukkan bingkai data Anda ke fungsi berikut :

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) 
}

Pemakaian:

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

masukkan deskripsi gambar di sini

Anda dapat mengubah sudut rotasi label sesuai kebutuhan.

Berhubung dgn sibernetika
sumber
6

Anda dapat menggunakan ggplot2 untuk memutar label sumbu x dengan menambahkan lapisan tambahan

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

sumber
2

Jawaban Andre Silva sangat cocok untuk saya, dengan satu peringatan di baris "barplot":

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

Perhatikan argumen "xaxt". Tanpa itu, label digambar dua kali, pertama kali tanpa rotasi 60 derajat.

Alvaro Gonzalez
sumber
1

Dalam dokumentasi Bar Plots kita dapat membaca tentang parameter tambahan ( ...) yang dapat diteruskan ke pemanggilan fungsi:

...    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.

Dalam dokumentasi parameter grafis (dokumentasi par) kita dapat melihat:

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.

Itulah mengapa passing las=2adalah jawaban yang tepat.

banan3'14
sumber