Ich würde gerne Tick-Etiketten mit hochgestellten wie in Mylabels im folgenden Beispiel machen. Allerdings möchte ich sie nicht Hand-Code, ich möchte, dass sie 3^STUFEN gehen, in denen die Werte eine KonstanteR: Erzeugen Sie plot axis break Etiketten mit superscripts programmatisch (Schwerpunkt auf die programmatische)
library(ggplot2)
LEVELS = 4
mylabels = c(
expression(paste(3^4,"= 81")),
expression(paste(3^3,"= 27")),
expression(paste(3^2,"= 9")),
expression(paste(3^1,"= 3")),
expression(paste(3^0,"= 1")))
mylabels
length(mylabels)
df=data.frame(x=runif(40),y=(runif(40)*10)%%5)
p = ggplot(df,aes(x,y)) +
geom_point() +
scale_y_continuous(breaks = 0:LEVELS, labels = mylabels)
p
Die hart codiert verison perfekt funktioniert. Aber ich kann es nicht programmatisch bekommen. Die folgende:
mylabels=c(paste("expression(paste(3^",LEVELS:0,'," = ',3^(LEVELS:0),'"))',sep=""))
nicht ordnungsgemäß in der Tabelle bewerten (zum Beispiel schreibt das Wort ‚Ausdruck‘ usw. in dem Etikett). Es schafft:
[1] "expression(paste(3^4,\" = 81\"))" "expression(paste(3^3,\" = 27\"))" "expression(paste(3^2,\" = 9\"))"
[4] "expression(paste(3^1,\" = 3\"))" "expression(paste(3^0,\" = 1\"))"
und was ich will, ist:
expression(paste(3^4, "= 81"), paste(3^3, "= 27"), paste(3^2,
"= 9"), paste(3^1, "= 3"), paste(3^0, "= 1"))
Haben etwa mit Zusammenbruch messed, noquote, eval, sprintf usw.
plus1 gut gemacht ersetzen .. Ich war auf diese zu viel Zeit zu verschwenden. (Scheint du kannst es vereinfachen 'mylabels <- parse (text = sprintf ('3 ^% d ==% d', LEVELS: 0, 3^(LEVELS: 0))) ', aber ich weiß nicht, ob das kommen wird zurück und beißen – user20650
@ user20650 Excellent Punkt, funktioniert Ihre Vereinfachung hier.Der einzige Nachteil ist, dass, wenn das Stück der Bezeichnung rechts von der '3 ^% d 'nicht gültig R-Syntax wäre, dann würde es nicht funktionieren, weil 'parse()' wäre nicht in der Lage, es in einen gültigen R-Syntaxbaum zu zerlegen, aber da es in diesem Fall eine gültige Syntax ist, funktioniert es. – bgoldst