Ich habe den folgenden ggplot
Befehl verwendet:
ggplot(survey, aes(x = age)) + stat_bin(aes(n = nrow(h3), y = ..count.. / n), binwidth = 10)
+ scale_y_continuous(formatter = "percent", breaks = c(0, 0.1, 0.2))
+ facet_grid(hospital ~ .)
+ theme(panel.background = theme_blank())
produzieren
Ich möchte die Facettenbeschriftungen jedoch in etwas kürzeres (wie ...) ändern Hosp 1
, Hosp 2
da sie jetzt zu lang sind und eng aussehen (das Erhöhen der Höhe des Diagramms ist keine Option, es würde zu viel Platz in Anspruch nehmen das Dokument). Ich habe auf die Facet_grid-Hilfeseite geschaut , kann aber nicht herausfinden, wie.
ggplot(transform(iris, Species = c("S", "Ve", "Vi")[as.numeric(Species)]), aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)
levels(x$measurements) <- c(bquote(Area ~~ (cm^2)), bquote(Length ~~ (cm)))
), wird sie nicht im mathematischen Ausdruck angezeigt . Wie würde man Ausdrücke als Facettenbezeichnungen anzeigen?labeller
Option, um Ausdrücke in das Facettenetikett aufzunehmenfacet_grid
: stackoverflow.com/questions/37089052/…Hier ist eine Lösung, die das Bearbeiten Ihrer Daten vermeidet:
group
Angenommen, Ihr Plot wird durch den Teil Ihres Datenrahmens mit Ebenen facettiertcontrol, test1, test2
, und erstellen Sie dann eine Liste mit den folgenden Werten:Erstellen Sie dann eine Labeller-Funktion und übertragen Sie sie in Ihren facet_grid-Aufruf:
Dabei werden die Ebenen des Datenrahmens verwendet, um die Liste der Krankenhausnamen zu indizieren und die Listenwerte (die richtigen Namen) zurückzugeben.
Bitte beachten Sie, dass dies nur funktioniert, wenn Sie nur eine Facettenvariable haben. Wenn Sie zwei Facetten haben, muss Ihre Etikettierfunktion für jede Facette einen anderen Namensvektor zurückgeben. Sie können dies mit etwas tun wie:
Wo
facet1_names
undfacet2_names
sind vordefinierte Listen von Namen, die durch die Facettenindexnamen indiziert sind ('Hostpital # 1' usw.).Bearbeiten: Die obige Methode schlägt fehl, wenn Sie eine Variablen- / Wertekombination übergeben, die der Etikettierer nicht kennt. Sie können eine Ausfallsicherung für unbekannte Variablen wie folgt hinzufügen:
Antwort angepasst an das Ändern von strip.text-Beschriftungen in ggplot mit Facette und Rand = TRUE
edit: WARNUNG : Wenn Sie diese Methode verwenden, um eine Zeichenspalte zu facettieren, erhalten Sie möglicherweise falsche Beschriftungen. Siehe diesen Fehlerbericht .in neueren Versionen von ggplot2 behoben.quelle
Hier ist eine andere Lösung, die im Geiste der von @ naught101 angegebenen ist, aber einfacher ist und auch keine Warnung auf die neueste Version von ggplot2 wirft.
Grundsätzlich erstellen Sie zunächst einen benannten Zeichenvektor
Und dann verwenden Sie es als Etikettierer, indem Sie einfach die letzte Zeile des Codes ändern, der von @ naught101 an angegeben wird
Hoffe das hilft.
quelle
as_labeller
? Ich habe einen Quellcode für das CRAN GitHub-Repository gefunden , aber nach dem Upgrade auf die neueste Version (auf CRAN!) Scheine ich die Funktion nicht zu haben.hospital ~ gender
oder so? Gibt es eine Möglichkeit, Etikettierer auf beiden Achsen zu verwenden? Ich kann in den Dokumenten nichts Offensichtliches sehen.So habe ich es mit
facet_grid(yfacet~xfacet)
ggplot2, Version 2.2.1 gemacht:Beachten Sie, dass dies keinen Anruf enthält
as_labeller()
- etwas, mit dem ich eine Weile zu kämpfen hatte.Dieser Ansatz ist vom letzten Beispiel auf der Hilfeseite Coerce to Labeller-Funktion inspiriert .
quelle
setNames()
stackoverflow.com/a/22428439/3362993Wenn Sie zwei Facetten haben
hospital
undroom
nur eine umbenennen möchten, können Sie Folgendes verwenden:Um zwei Facetten mithilfe des vektorbasierten Ansatzes umzubenennen (wie in der Antwort von naught101), haben Sie folgende Möglichkeiten:
quelle
Die EINFACHSTE Möglichkeit, Änderungen vorzunehmen, ohne die zugrunde liegenden Daten zu ändern, ist:
1) Erstellen Sie ein Objekt mit der
as_labeller
Funktion Hinzufügen des hinteren Häkchens für jeden der Standardwerte :2) Wir fügen dem GGplot hinzu:
quelle
Beachten Sie, dass diese Lösung nicht gut funktioniert, wenn ggplot weniger Faktoren anzeigt, als Ihre Variable tatsächlich enthält (was passieren könnte, wenn Sie beispielsweise eine Teilmenge verwendet hätten):
Eine einfache Lösung (neben dem Hinzufügen aller nicht verwendeten Faktoren in names_li, was mühsam sein kann) besteht darin, die nicht verwendeten Faktoren mit droplevels () entweder im Originaldatensatz oder in der Labbeler-Funktion zu löschen, siehe:
quelle
Diese Lösung kommt dem von @domi sehr nahe, soll jedoch den Namen verkürzen, indem die ersten 4 Buchstaben und die letzte Zahl abgerufen werden.
quelle
Beide
facet_wrap
undfacet_grid
akzeptieren auch Eingaben vonifelse
als Argument. Wenn die für das Facettieren verwendete Variable logisch ist, ist die Lösung sehr einfach:Wenn die Variable mehr Kategorien hat, muss die
ifelse
Anweisung verschachtelt werden .Als Nebeneffekt ermöglicht dies auch die Facettierung der Gruppen innerhalb des
ggplot
Anrufs.quelle
Hinzufügen einer anderen Lösung ähnlich der von @ domi mit dem Parsen von mathematischen Symbolen, hochgestellten, tiefgestellten, Klammern / Klammern usw.
Erstellt am 30.03.2019 durch das reprex-Paket (v0.2.1.9000)
quelle
Ich denke, alle anderen Lösungen sind wirklich hilfreich, aber es gibt noch einen anderen Weg.
Ich nehme an:
dplyr
Paket installiert , das den praktischenmutate
Befehl hat, undIhr Datensatz heißt
survey
.Umfrage%>% mutieren (Hosp1 = Krankenhaus1, Hosp2 = Krankenhaus2, ........)
Mit diesem Befehl können Sie Spalten umbenennen, alle anderen Spalten bleiben jedoch erhalten.
Dann mach dasselbe
facet_wrap
, es geht dir jetzt gut.quelle
Die Definition der Etikettierfunktion
variable, value
als Argumente würde für mich nicht funktionieren. Auch wenn Sie Ausdruck verwenden möchten, müssen Sie lapply verwenden und können nicht einfach verwendenarr[val]
, da das Argument für die Funktion ein data.frame ist.Dieser Code hat funktioniert:
quelle
Da ich Beiträge noch nicht kommentieren darf, veröffentliche ich dies separat als Nachtrag zu Vince's Antwort und son520804's Antwort . Kredit geht an sie.
Anhand des Iris-Beispiels von Vince und des Teilcodes von son520804 habe ich dies mit der Mutate-Funktion gemacht und eine einfache Lösung erzielt, ohne den Originaldatensatz zu berühren. Der Trick besteht darin, einen Ersatznamenvektor zu erstellen und mutate () in der Pipe zu verwenden, um die Facettennamen vorübergehend zu korrigieren:
In diesem Beispiel sehen Sie, dass die Ebenen von i $ Species vorübergehend in entsprechende allgemeine Namen geändert werden, die im Vektor new_names enthalten sind. Die Zeile enthält
kann leicht entfernt werden, um die ursprüngliche Benennung anzuzeigen.
Achtung: Dies kann leicht zu Fehlern in Namen führen, wenn der Vektor new_name nicht korrekt eingerichtet ist. Es wäre wahrscheinlich viel sauberer, eine separate Funktion zu verwenden, um die variablen Zeichenfolgen zu ersetzen. Beachten Sie, dass der Vektor new_name möglicherweise auf unterschiedliche Weise wiederholt werden muss, um der Reihenfolge Ihres ursprünglichen Datensatzes zu entsprechen. Bitte überprüfen Sie doppelt und dreifach, ob dies korrekt erreicht wurde.
quelle
new_names <- c('setosa' = 'Bristle-pointed iris', 'versicolor' = 'Poison flag iris', 'virginica' = 'Virginia iris')
und dann in der Mutate könnten Sie eine neue Spalte so erstellen:mutate(Spec = new_names[Species])
Das funktioniert bei mir.
Definieren Sie einen Faktor:
und verwenden, in
ggplot()
:quelle
Nur die Antwort von naught101 erweitern - das Verdienst geht an ihn
Sie müssen lediglich eine Liste mit Name-zu-Name-Zuordnung erstellen
und
plot_labeller()
mit neuen Standardargumenten neu definieren :Und dann:
Alternativ können Sie für jede gewünschte Etikettenänderung eine eigene Funktion erstellen.
quelle
Ich habe eine andere Möglichkeit, dasselbe Ziel zu erreichen, ohne die zugrunde liegenden Daten zu ändern:
Was ich oben getan habe, ist das Ändern der Beschriftungen des Faktors im ursprünglichen Datenrahmen, und das ist der einzige Unterschied zu Ihrem ursprünglichen Code.
quelle
Haben Sie versucht, die spezifischen Ebenen Ihres
Hospital
Vektors zu ändern ?quelle
Ich habe das Gefühl, ich sollte meine Antwort darauf hinzufügen, weil ich ziemlich lange gebraucht habe, um diese Arbeit zu machen:
Diese Antwort ist für Sie, wenn:
bquote
) in Ihren Labels undIch habe die Beschriftungen im Grunde genommen in einen benannten Vektor eingefügt, damit die Beschriftungen nicht verwirrt oder vertauscht werden. Der
labeller
Ausdruck könnte wahrscheinlich einfacher sein, aber das funktioniert zumindest (Verbesserungen sind sehr willkommen). Beachten Sie das `(hintere Anführungszeichen), um den Facettenfaktor zu schützen.quelle
Einfache Lösung (von hier ):
quelle
Nachdem er eine Weile zu kämpfen, was ich gefunden habe , ist , dass wir verwenden können
fct_relevel()
undfct_recode()
vonforcats
in Verbindung , die Reihenfolge der Facetten zu verändern als auch die Facette Etiketten fixieren. Ich bin nicht sicher, ob es vom Design unterstützt wird, aber es funktioniert! Schauen Sie sich die folgenden Diagramme an:Erstellt am 2020-02-16 durch das reprex-Paket (v0.3.0)
quelle