it-swarm.com.de

Tiefgestellte Buchstaben in der Achsenbezeichnung ggplot

Ein weiteres Diagramm zur Veröffentlichung, ein weiterer Tag, an dem die Dinge in ggplot2 geändert wurden ... Bin ich dabei? Ich bin mir nicht sicher...

dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1]))

dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1d]))

Ich versuche herauszufinden, wie man tiefgestellte Buchstaben in einer Achsenbeschriftung hat. Das erste Beispiel funktioniert so, als wäre es nur eine Zahl. Sobald Sie ein Zeichen in den eckigen Klammern haben, schlägt dies fehl. Blah [tiefgestellt (1d)] ist im Wesentlichen das, was ich brauche, aber ich kann nicht herausfinden, wie ich Briefe tiefgestellt bekomme. Habe Variationen ausprobiert, einschließlich paste () etc.

Natürlich zur Frustration hinzufügen ...

labs(y=expression(Blah[12])) - das funktioniert

labs(y=expression(Blah[d])) - das funktioniert

labs(y=expression(Blah[d1])) - das funktioniert

labs(y=expression(Blah[1d])) - dies schlägt fehl.

Gedanken?

58
nzcoops

Ich kann mir zwei bessere Möglichkeiten vorstellen, als paste zu verwenden:

 ggplot(dat, aes(x=x,y=y)) +
     geom_point() +
     labs(y=expression(Blah[1*d]))
 ggplot(dat, aes(x=x,y=y)) +
     geom_point() +
     labs(y=expression(Blah["1d"]))

Token (oder "Namen" oder "Symbole") in R dürfen nicht mit Ziffern beginnen. Sie können diese Einschränkung umgehen, indem Sie entweder 1 Und d in Anführungszeichen setzen oder durch ein nicht durch Leerzeichen getrenntes Trennzeichen (den Operator *) Trennen. Das "verbindet" oder "ligiert" ein reines numerisches Literal mit einem legalen R-Symbol oder Token.

So erhalten Sie ein nicht abonniertes Prozentzeichen:

 ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1*d]*"%"))

Um das pct-Zeichen mit Parens zu versehen:

expression(Blah[1*d]*"(%)")

Das Zeichen % Hat bei der R-Analyse eine besondere Bedeutung, da es den Beginn eines benutzerdefinierten Infix-Operators kennzeichnet. Wenn Sie es also als Literal verwenden, müssen Sie es in Anführungszeichen setzen. Aus der gleichen Überlegung müssen die Wörter "für" und "in" in Anführungszeichen gesetzt werden, da sie zur Gruppe "reservierte Wörter" für R gehören. Es gibt andere reservierte Wörter (aber for und in sind diejenigen, die mich am häufigsten stören.) Typ:

 ?Reserved
64
42-

Okay. Ich schwöre, ich habe das nicht nur gepostet, um es selbst zu beantworten, egal wie schnell ich es bekommen habe (immer so, wenn du eine Frage stellst!)

Hier ist es:

ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1][d]))

Ich dachte, es ist am besten, die Antwort zu posten, anstatt die Frage zu entfernen, da dies eines Tages jemand anderem helfen könnte.

'Blahs' beiseite, was ich eigentlich wollte, war expression(paste("Hb", A[1][c]," (%)",sep=""))

Warum paste0() hier nicht funktioniert, ist mir ein Rätsel.

8
nzcoops