2012-04-23 4 views
60

Sto provando a far ruotare le etichette dell'asse x di 45 gradi su un barplot senza fortuna. Questo è il codice che ho qui di seguito:Rotazione delle etichette dell'asse x in R per barattolo

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) 

risposta

45

RISPOSTA A CURA PER RISPOSTA DAVID'S:

Ecco un tipo di strada hacker. Immagino che ci sia un modo più semplice. Ma potresti eliminare le etichette delle barre e il testo di stampa delle etichette salvando le posizioni delle barre da barplot e modificando leggermente le impostazioni. Ecco un esempio con il set mtcars di dati:

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) 
+0

_caveat_: Se stai usando 'beside = TRUE', probabilmente vorrai usare' colMeans (x) 'invece di solo' x' se vuoi una sola etichetta per gruppo. – MichaelChirico

23

Se si desidera ruotare le etichette x assi con angolo uguale o minore di 90, provare il seguente approccio:

Esso utilizza l'argomento del barplot space=1 fare la larghezza delle colonne è uguale allo spazio intervallo delle colonne.

In questo modo, è stato possibile adattare il codice fornito nello R FAQ che è stato individuato da @BenBarnes sotto la risposta di Tyler Rinker.

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" (source: http://stackoverflow.com/questions/1296646/how-to-sort-a-dataframe-by-columns-in-r) 

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) 

enter image description here

154

uso las = 2.

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

enter image description here

+0

funziona assolutamente. grazie –

+1

Credo che questa dovrebbe essere la risposta accettata. Funziona perfettamente utilizzando un parametro della funzione barplot di base utilizzata nella domanda. – jwhaley58

+0

Concordato, questa dovrebbe essere la risposta accettata. La soluzione molto più concisa – snlan

1

risposta di Andre Silva funziona alla grande per me, con un avvertimento nella riga "barplot":

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

Avviso l'argomento "xaxt". Senza di esso, le etichette vengono disegnate due volte, la prima volta senza la rotazione di 60 gradi.

0

Si può semplicemente passare il frame di dati nel seguente funzione:

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

Usage:

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

enter image description here

È possibile cambiare l'angolo di di rotazione di le etichette come necessario.