Frage

Ich habe eine Handlung, bei der die X-Achse ein Faktor ist, dessen Etiketten lang sind. Obwohl ich wahrscheinlich keine ideale Visualisierung hat, möchte ich vorerst diese Etiketten einfach um vertikal drehen. Ich habe diesen Teil mit dem Code unten herausgefunden, aber wie Sie sehen können, sind die Beschriftungen nicht ganz sichtbar.

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + opts(axis.text.x=theme_text(angle=-90))

enter image description here

War es hilfreich?

Lösung

Ändern Sie die letzte Zeile in

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

Standardmäßig sind die Achsen in der Mitte des Textes ausgerichtet, auch wenn sie gedreht sind. Wenn Sie sich +/- 90 Grad drehen, möchten Sie normalerweise, dass es stattdessen am Rand ausgerichtet wird:

alt text

Das Bild oben stammt von Dieser Blog -Beitrag.

Andere Tipps

Ändern Sie die letzte Zeile in die gleiche Richtung wie die Y-Achse-Etikett

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

Verwenden coord_flip()

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))

qplot(cut,carat,data = diamonds, geom = "boxplot") +
  coord_flip()

enter image description here


In CH 3.9 von R für Datenwissenschaft, Wickham und Grolemund sprechen genau mit dieser Frage:

coord_flip() Schaltet die x- und y -Achsen. Dies ist (zum Beispiel) nützlich, wenn Sie horizontale Boxplots wünschen. Es ist auch nützlich für lange Etiketten: Es ist schwierig, sie zu passen, ohne sich auf die X-Achse zu überlappen.

Ich möchte eine alternative Lösung bereitstellen, eine robuste Lösung, die dem vorgeschlagen werde, war in der neuesten Version von erforderlich ggtern, Seit Einführung der Leinwand -Rotationsfunktion.

Grundsätzlich müssen Sie die relativen Positionen mithilfe der Trigonometrie bestimmen, indem Sie eine Funktion aufbauen, die eine zurückgibt element_text Objekt, gegebener Winkel (dh Grad) und Positionierung (dh einer von x, y, oberen oder rechten) Informationen.

#Load Required Libraries
library(ggplot2)
library(gridExtra)

#Build Function to Return Element Text Object
rotatedAxisElementText = function(angle,position='x'){
  angle     = angle[1]; 
  position  = position[1]
  positions = list(x=0,y=90,top=180,right=270)
  if(!position %in% names(positions))
    stop(sprintf("'position' must be one of [%s]",paste(names(positions),collapse=", ")),call.=FALSE)
  if(!is.numeric(angle))
    stop("'angle' must be numeric",call.=FALSE)
  rads  = (angle - positions[[ position ]])*pi/180
  hjust = 0.5*(1 - sin(rads))
  vjust = 0.5*(1 + cos(rads))
  element_text(angle=angle,vjust=vjust,hjust=hjust)
}

Ehrlich gesagt, meiner Meinung nach denke ich, dass eine "Auto" -Option in der verfügbaren Option zur Verfügung gestellt werden sollte ggplot2 für die hjust und vjust Bei Argumenten, die den Winkel sowieso angeben, zeigen wir, wie die oben genannten Funktionen funktionieren.

#Demonstrate Usage for a Variety of Rotations
df    = data.frame(x=0.5,y=0.5)
plots = lapply(seq(0,90,length.out=4),function(a){
  ggplot(df,aes(x,y)) + 
    geom_point() + 
    theme(axis.text.x = rotatedAxisElementText(a,'x'),
          axis.text.y = rotatedAxisElementText(a,'y')) +
    labs(title = sprintf("Rotated %s",a))
})
grid.arrange(grobs=plots)

Das erzeugt die folgenden:

Example

Das ggpubr Das Paket bietet eine Verknüpfung, die standardmäßig das Richtige tut (rechter Text -Text, mittleres Textfeld für das Ticken):

library(ggplot2)
diamonds$cut <- paste("Super Dee-Duper", as.character(diamonds$cut))
q <- qplot(cut, carat, data = diamonds, geom = "boxplot")
q + ggpubr::rotate_x_text()

Erstellt am 2018-11-06 von der Reprex -Paket (v0.2.1)

Gefunden mit einer Github -Suche nach den relevanten Argumentnamen: https://github.com/search?l=r&q=element_text+angle+90+vjust+org%3Acran&type=Code

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top