Rotazione delle etichette dell’asse x in R per barplot

Sto cercando di far ruotare le etichette dell’asse x di 45 gradi su un barplot senza fortuna. Questo è il codice che ho di seguito:

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 MODIFICATA PER RISPOSTA DI DAVID:

Ecco una specie di modo hackish. Immagino che ci sia un modo più semplice. Ma si potrebbero sopprimere le etichette delle barre e il testo di barplot delle etichette salvando le posizioni delle barre da barplot e barplot leggermente su e giù. Ecco un esempio con il set di dati 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) 

utilizzare il parametro opzionale las = 2.

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

inserisci la descrizione dell'immagine qui

Se vuoi ruotare le etichette dell’asse x con un angolo uguale o inferiore a 90, prova il seguente approccio:

Usa lo space=1 argomento space=1 di barplot per rendere la larghezza della colonna uguale allo spazio intervallo delle colonne.

In questo modo, è stato ansible adattare il codice fornito nelle FAQ R 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) 

inserisci la descrizione dell'immagine qui

Puoi usare

 par(las=2) # make label text perpendicular to axis 

È scritto qui: http://www.statmethods.net/graphs/bar.html

Puoi semplicemente passare il tuo frame di dati nella 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) } 

Uso:

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

inserisci la descrizione dell'immagine qui

È ansible modificare l' angolo di rotazione delle etichette secondo necessità.

La risposta di Andre Silva funziona alla grande per me, con un avvertimento nella linea “barplot”:

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

Si noti l’argomento “xaxt”. Senza di esso, le etichette vengono disegnate due volte, la prima volta senza la rotazione di 60 gradi.

Puoi utilizzare ggplot2 per ruotare l’etichetta dell’asse x aggiungendo un ulteriore livello

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