Ich erstelle eine Grafik mit facet_grid
, um eine kategorische Variable auf der y-Achse zu facettieren. Ich entschied mich, facet_wrap
nicht zu verwenden, weil ich space = 'free'
und labeller = label_parsed
benötige. Meine Etiketten sind lang und ich habe eine Legende auf der rechten Seite, also möchte ich die Etiketten von der rechten Seite des Panels an die Oberseite des Panels verschieben.ggplot2: Verwenden von gtable zum Verschieben von Strip-Labels an den Anfang des Panels für facet_grid
Hier ist ein Beispiel, um zu zeigen, wo ich stecken bleibe.
library(ggplot2)
library(gtable)
mt <- ggplot(mpg, aes(x = cty, y = model)) + geom_point() +
facet_grid(manufacturer ~ ., scales = 'free', space = 'free') +
theme_minimal() +
theme(panel.margin = unit(0.5, 'lines'), strip.text.y = element_text(angle = 0))
Nun würde Ich mag den Streifen Text von rechts jeder Platte an der Oberseite jeder Platte zu bewegen. Ich kann die Grobs für die Streifenetiketten speichern und sie vom Grundstück entfernen:
grob <- ggplotGrob(mt)
strips.y <- gtable_filter(grob, 'strip-right')
grob2 <- grob[,-5]
Aber jetzt bin ich stecken, wenn es um rbind
kommt wieder die Grobs -ing so die Etiketten an die Spitze der Platten gehen.
Eine andere mögliche Lösung wäre facet_wrap
zu verwenden und dann die Platten as discussed in another question die Größe neu, aber in diesem Fall würde ich manuell die Etiketten auf den Facetten ändern, weil es keine labeller = label_parsed
für facet_wrap
ist.
Ich würde Vorschläge auf beiden Ansatz schätzen!
Dank für das Lesen,
Tom
Das ist fantastisch, danke.Ich habe nur ein paar kleine Änderungen an Ihrem ersten Ansatz vorgenommen, so dass ich daraus eine Funktion machen konnte: 'für (i in 1: Länge (Streifen $ t)) gt = gtable_add_grob (gt, stripText $ grobs [[i ]], t = Felder $ t [i] -1, l = 4, r = 4) ' -> ' für (i in 1: Länge (Streifen $ t)) gt = gtable_add_grob (gt, stripText $ grobs [[i]], t = Felder $ t [i] -1, l = min (Felder $ l), r = max (Felder $ r)) ' zum Einfügen des neuen Streifens grobs und ' gt = gt [ , -5] ' -> ' gt <- gt [, - c (min (Streifen $ l), max (Streifen $ r))] ' um die alten Streifen zu entfernen. –