2017-02-02 2 views
2

Wenn ich die Schriftgröße eines geom_text ändern möchte, kann ich den size Parameter verwenden. Aber was, wenn ich ein ggplot Objekt habe, das von jemand anderem erzeugt wird (in einer Funktion sagen wir) und ich möchte die Schriftgröße danach ändern? (Ich könnte die Funktion neu schreiben und einen zusätzlichen Größenparameter zulassen, aber das möchte ich vermeiden).Wie ändert man die Schriftgröße von geom_text post ex

Ich spielte mit theme(text = element_text(size = 20)), aber das änderte jeden Text, aber die geom_text? Ich habe auch versucht, die jeweilige Schicht durch eine neue geom_text Schicht zu ersetzen. Da jedoch in dem fremden Funktionsaufruf das Datenargument für die geom_text geändert wurde, bekomme ich einen Fehler wegen fehlender Ästhetik.

-Code

library(ggplot2) 
functionICannotControl <- function() { 
    mdat <- mtcars 
    mdat$cyl2 <- LETTERS[mdat$cyl] 
    ggplot(mtcars, aes(x = hp, y = mpg)) + geom_text(aes(label = cyl2), data = mdat) 
} 
(bp <- functionICannotControl()) 

## changed only other text elements 
bp + theme(text = element_text(size = 20)) 
## gives an error 
bp2 <- bp 
bp2$layers[[1]] <- geom_text(size = 20) 
bp2 
## Error: geom_text requires the following missing aesthetics: label 
bp2$layers[[1]] <- geom_text(aes(label = cyl2), size = 20) 
bp2 
## Error in eval(expr, envir, enclos) : object 'cyl2' not found 

Antwort

2

OK, fand ich die Lösung (und als Referenz, wenn jemand das gleiche Problem hat). Wir können den aes_params Schlitz der Schicht ändern:

bp$layers[[1]]$aes_params 
## named list() 

bp$layers[[1]]$aes_params$size <- 20 
bp 

N.B. Es hilft Ihnen, ein minimales Arbeitsbeispiel zu schreiben, denn durch eine gut strukturierte Frage können Sie etwas über Ihr eigenes Problem lernen;)

Verwandte Themen