webentwicklung-frage-antwort-db.com.de

Wie ändere ich manuell die Schlüsselbezeichnungen in einer Legende in ggplot2?

Ich bereite ein Grundstück zur Veröffentlichung vor. Ich erstellte ein gestapeltes Box-Diagramm, um die Häufigkeit von Patienten in jeder Gruppe zu zeigen, bei denen es sich um eine komplizierte Anhäufung von Seronegativen handelte. Die Legende verwendet die Etiketten aus dem Datenrahmen, die für uns geeignet sind, die am Projekt arbeiten, aber nicht zur Veröffentlichung. Ich möchte die Namen so ändern, dass sie vom Leser schneller verstanden werden.

Führen Sie zum Beispiel das folgende Skript aus

grp <- gl(n=4,k=20,labels=c("group a","group b","group c", "group d"))
value <- runif(n=80, min=10, max=150)
outcome <- cut(value,2)
data <- data.frame(grp,value,outcome)
ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group") 
             +ylab("number of subjects") + labs(fill="Serologic response")

Dieser Code erzeugt die nicht zur Veröffentlichung geeigneten Tastenbezeichnungen "(10.4,80]" und "(80,150]". Stattdessen möchte ich "doppelt negativ" und "positiv für a und/oder b".

Ich schätze, ich könnte zum Datenrahmen zurückkehren und eine neue Variable mit der richtigen Beschriftung transformieren. Oder ich könnte meinen Faktor einfach umbenennen ? Ich würde es jedoch vorziehen, es zum Zeitpunkt des Zeichnens zu tun.

37
Farrel

Die Standardmethode besteht darin, die Skalierungsfunktionen zu verwenden, um die angezeigten Beschriftungen für Gruppen zu ändern. Sie können Ihren ggplot -Anruf durch ersetzen

ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group") +
  ylab("number of subjects") + 
  scale_fill_discrete("Serologic response", 
                      breaks=c("(10.1,79.9]","(79.9,150]"), 
                      labels=c("double negative", "positive for a and/or b"))

Beachten Sie, dass der Titel der Waage in den Aufruf scale_fill_discrete Aufgenommen wurde. Sie können dies auch mit den Achsen tun, wenn Sie möchten

ggplot(data, aes(grp, fill=outcome)) + geom_bar() +
  scale_x_discrete("group") +
  scale_y_continuous("number of subjects") + 
  scale_fill_discrete("Serologic response", 
                      breaks=c("(10.1,79.9]","(79.9,150]"), 
                      labels=c("double negative", "positive for a and/or b"))
38
Brian Diggs

Ich habe einen hybriden Weg gefunden, es zu tun. Der Faktor wird umbenannt, aber ich muss ihn nicht im Datenrahmen ausführen. Stattdessen mache ich es einfach im Befehl ggplot.

ggplot(data, aes(grp, fill=factor(outcome,labels=c("low","high")))) + 
  geom_bar() +xlab("group") +ylab("number of subjects") +
   labs(fill="Serologic response")

Gibt es noch andere Möglichkeiten?

24
Farrel