web-dev-qa-db-fra.com

Rotation des étiquettes d'axe x en R pour le graphique à barres

J'essaie d'obtenir une rotation de 45 degrés des étiquettes de l'axe des abscisses sur un diagramme en barres sans succès. C'est le code que j'ai ci-dessous:

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

RÉPONSE MODIFIÉE SELON LA RÉPONSE DE DAVID:

Voici une sorte de façon bidon. Je devine qu'il y a un moyen plus facile. Mais vous pouvez supprimer les étiquettes de barre et le texte de tracé des étiquettes en enregistrant les positions de barre de barplot et faire un petit ajustement de haut en bas. Voici un exemple avec le jeu de données 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)
55
Tyler Rinker

utilisez le paramètre optionnel las = 2.

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

enter image description here

232
Michael Z

Si vous souhaitez faire pivoter les étiquettes de l'axe x avec un angle égal ou inférieur à 90, essayez l'approche suivante:

Il utilise l'argument du barplot space=1 pour rendre la largeur des colonnes égale à l'espace d'intervalle des colonnes.

De cette façon, il était possible d'adapter le code fourni dans le R FAQ qui avait été identifié par @BenBarnes dans la réponse de 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

28
Andre Silva

Vous pouvez utiliser

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

Il est écrit ici: http://www.statmethods.net/graphs/bar.html

7
vlad

Vous pouvez simplement passer votre trame de données dans la fonction suivante :

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

Utilisation:

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

enter image description here

Vous pouvez modifier l’angle de rotation des étiquettes selon vos besoins.

7
Cybernetic

Vous pouvez utiliser ggplot2 pour faire pivoter l’étiquette de l’axe des x en ajoutant un calque supplémentaire.

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

La réponse d’André Silva me convient parfaitement, avec une mise en garde dans la ligne "barplot":

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

Notez l'argument "xaxt". Sans cela, les étiquettes sont tracées deux fois, la première fois sans rotation à 60 degrés.

2
Alvaro Gonzalez