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

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)
Tyler Rinker
quelle
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

Michael Z.
quelle
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

Andre Silva
quelle
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 .

Kybernetisch
quelle
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))

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

Alvaro Gonzalez
quelle
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.

banan3'14
quelle