Drehen der Beschriftungen der x-Achse in R für Barplot


92

Ich versuche, die Beschriftungen der x-Achse auf einem Barplot ohne Glück um 45 Grad zu drehen. Dies ist der Code, den ich unten habe:

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)

Antworten:


59

BEARBEITETE ANTWORT PRO DAVID'S ANTWORT:

Hier ist eine Art hackiger Weg. Ich vermute, es gibt einen einfacheren Weg. Sie können jedoch die Balkenbeschriftungen und den Plottext der Beschriftungen unterdrücken, indem Sie die Balkenpositionen speichern barplotund ein wenig nach oben und unten optimieren. Hier ist ein Beispiel mit dem mtcars-Datensatz:

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)

2
Einschränkung : Wenn Sie verwenden beside = TRUE, möchten Sie wahrscheinlich verwenden, colMeans(x)anstatt nur, xwenn Sie nur ein Etikett pro Gruppe möchten.
MichaelChirico

261

Verwenden Sie den optionalen Parameter las = 2.

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

Geben Sie hier die Bildbeschreibung ein


1
Ich glaube, dass dies die akzeptierte Antwort sein sollte. Funktioniert perfekt mit einem Parameter der in der Frage verwendeten Basis-Barplot-Funktion.
jwhaley58

Einverstanden sollte dies die akzeptierte Antwort sein. Viel prägnantere Lösung
Snlan

16
Verwenden Sie par (mar = c (15,4,4,2)), um die Ränder so anzupassen, dass die vertikalen Beschriftungen nicht aus der Abbildung abgeschnitten werden.
Steven Magana-Zook

23
Ich persönlich bevorzuge diesen Ansatz, aber er hat die ursprüngliche Frage des OP nicht beantwortet: Ich versuche, die Beschriftungen der x-Achse auf einem Barplot um 45 Grad zu drehen
Arpieb

Sie können sehen, dass 'make' durch Etiketten abgedeckt ist. Wie man es repariert?
Filip Bartuzi

29

Drehen Sie die Beschriftungen der x-Achse mit einem Winkel von mindestens 90 Grad mithilfe von Basisgrafiken. Code aus den R FAQ angepasst :

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)

Geben Sie hier die Bildbeschreibung ein


7

Sie können Ihren Datenrahmen einfach an folgende Funktion übergeben :

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

Verwendung:

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

Geben Sie hier die Bildbeschreibung ein

Sie können den Drehwinkel der Etiketten nach Bedarf ändern .



6

Mit ggplot2 können Sie die Beschriftung der x-Achse drehen und eine zusätzliche Ebene hinzufügen

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

2

Die Antwort von Andre Silva funktioniert gut für mich, mit einer Einschränkung in der "Barplot" -Linie:

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

Beachten Sie das Argument "xaxt". Ohne sie werden die Etiketten zweimal gezeichnet, das erste Mal ohne die 60-Grad-Drehung.


1

In der Dokumentation von Balkendiagrammen können wir die zusätzlichen Parameter ( ...) nachlesen , die an den Funktionsaufruf übergeben werden können:

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

In der Dokumentation der grafischen Parameter (Dokumentation von par) können wir sehen:

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.

Deshalb ist das Bestehen las=2die richtige Antwort.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.