Obracanie etykiet osi X w R dla wykresu słupkowego


99

Próbuję obrócić etykiety osi X o 45 stopni na wykresie słupkowym bez powodzenia. Oto kod, który mam poniżej:

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)

Odpowiedzi:


60

EDYTOWANA ODPOWIEDŹ NA ODPOWIEDŹ DAWIDA:

Oto rodzaj hakerskiego sposobu. Zgaduję, że jest łatwiejszy sposób. Ale możesz ukryć etykiety prętów i tekst wydruku etykiet, zapisując pozycje prętów od barploti wykonując niewielkie poprawki w górę iw dół. Oto przykład z zestawem danych 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
ostrzeżenie : jeśli używasz beside = TRUE, prawdopodobnie będziesz chciał użyć colMeans(x)zamiast xtylko jednej etykiety na grupę.
MichaelChirico

275

użyj opcjonalnego parametru las = 2.

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

wprowadź opis obrazu tutaj


3
Uważam, że powinna to być akceptowana odpowiedź. Działa doskonale, korzystając z parametru podstawowej funkcji wykresu słupkowego użytego w pytaniu.
jwhaley58

1
Zgoda, to powinna być akceptowana odpowiedź. O wiele bardziej zwięzłe rozwiązanie
snlan

17
użyj par (mar = c (15,4,4,2)), aby dostosować marginesy, aby pionowe etykiety nie zostały obcięte z rysunku.
Steven Magana-Zook

24
Osobiście wolę to podejście, ale nie odpowiada ono na pierwotne pytanie OP: próbuję obrócić etykiety osi x o 45 stopni na wykresie słupkowym
arpieb

1
widać, że „marka” jest oznaczona etykietami. Jak to naprawić?
Filip Bartuzi

30

Obróć etykiety osi X o kąt równy lub mniejszy niż 90 stopni, używając grafiki podstawowej. Kod dostosowany z 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)

wprowadź opis obrazu tutaj


8

Możesz po prostu przekazać ramkę danych do następującej funkcji :

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

Stosowanie:

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

wprowadź opis obrazu tutaj

W razie potrzeby można zmienić kąt obrotu etykiet.



6

Możesz użyć ggplot2, aby obrócić etykietę osi X, dodając dodatkową warstwę

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

2

Odpowiedź Andre Silvy działa dla mnie świetnie, z jednym zastrzeżeniem w wierszu „barplot”:

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

Zwróć uwagę na argument „xaxt”. Bez tego etykiety są rysowane dwukrotnie, po raz pierwszy bez obrotu o 60 stopni.


1

W dokumentacji Wykresów słupkowych możemy przeczytać o dodatkowych parametrach ( ...), które można przekazać do wywołania funkcji:

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

W dokumentacji parametrów graficznych (dokumentacji par) możemy zobaczyć:

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.

Dlatego las=2właściwą odpowiedzią jest podanie .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.