2016-06-21 25 views
3

würde Ich mag die Schriftgröße der Etiketten in diesem Diagramm ändern:Schriftgröße ändern von Etiketten ohne zu wissen, Etiketten in ggplot2

library(ggplot2) 
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + 
     geom_text(label=rownames(mtcars)) 
p 

mtcars plot

Mein Problem: Ich weiß nicht, was die Etiketten sind. (Ich speicherte ein Diagramm, in dem ich verschiedene data.frame() s zu add geom_text() s verwendete. Ich lud jetzt nur das Plot (in diesem Beispiel), aber will auch nicht die data.frame() s laden, mit denen ich die Etiketten erstellte).

Wie ich weiß nicht, was die Etiketten sind, kann ich nicht mit dieser Lösung:

p + geom_text(label=rownames(mtcars), size=2) 

(Ein weiteres Problem bei dieser Lösung wäre, dass ich immer noch die ursprüngliche geom_text() mit der größeren Schrift löschen erforderlich -Größe).


kann ich die Größe des gesamten Textes in der Handlung ändern mit dieser Lösung:

library(grid)  
grid.force() 
grid.gedit("GRID.text", grep=TRUE, gp=gpar(fontsize=4.5)) 

jedoch jetzt auch meine Achsen verändert, was nicht das, was ich wollte.


Ich glaube, es gibt mehrere Optionen zu erreichen, was ich will, mindestens zwei davon ziemlich einfach sein sollte, implementieren:

  1. Speichern Sie das Objekt grid.gedit()-p1 und dann p1 + theme(text = element_text(size=2)). Mein Problem hier: Ich kann das Objekt nicht von grid.gedit() speichern. Dies wäre meine bevorzugte Option.

  2. Gehen Sie in das rechte Ansichtsfenster, bevor Sie grid.gedit() anwenden. Ich habe das versucht, aber immer noch sowohl die Etiketten (was ich will) und die Achsen Text (was ich nicht will).

  3. Irgendwie extrahieren Sie die data.frame für die Etiketten aus dem gespeicherten Plot (in diesem Beispiel), um die Lösung, die ich zuerst zur Verfügung gestellt.

Antwort

1

Ihr grid.gedit Befehl war in der Nähe. Sie müssen gPath so einrichten, dass der Bearbeitungsbefehl nur diese Beschriftungen im Diagrammbereich findet. grid.ls(grid.force()) gibt eine Hierarchie von Grobs zurück. Finde das "Panel" und dann den "Text". (Hinweis: das 'g' in 'gedit' steht für 'grep = TRUE, global = TRUE')

library(ggplot2) 
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + 
     geom_text(label=rownames(mtcars)) 
p 

library(grid)  
grid.ls(grid.force()) # Locate the path to the labels in the panel 
grid.gedit(gPath("panel","GRID.text"), gp=gpar(fontsize=4.5)) 

Wenn Sie es vorziehen, mit ein paar mehr Zeilen Code kann das Grundstück Objekt bearbeitet werden, anstatt Bearbeitung auf dem Bildschirm.

g = ggplotGrob(p) 
g = editGrob(grid.force(g), gPath("panel", "GRID.text"), grep=TRUE, gp=gpar(fontsize=4.5)) 
grid.newpage() 
grid.draw(g) 

enter image description here

3

Sie können prüfen (/ ändern) die Handlung nach dem Bau,

library(ggplot2) 
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + 
    geom_text(label=rownames(mtcars)) 

g <- ggplot_build(p) 
# original data is in str(g$plot$data) 

# but it's easier to process the data for rendering 
g[["data"]][[1]][["size"]] <- 5 
g[["data"]][[1]][["colour"]] <- "red" 

gg <- ggplot_gtable(g) 
grid.newpage() 
grid.draw(gg) 

enter image description here

+0

+ 1 zu zeigen, wie ggplot speichert die Daten, die ich dachte, dass ich nicht zugreifen kann. Ich entschied mich am Ende für Sandys Lösung, weil ich die Grid-Syntax für Änderungen mag, aber das ist eine persönliche Vorliebe. – Flo

Verwandte Themen