Podczas korzystania z facet_grid
, ggplot2
dzieli główne kategorie, które składają się na zmienne aspektów z szerszą niż zwykle białą linią. To służy większości celów. Czasami chcę wyraźniej wskazać podziały między tymi głównymi kategoryzacjami i chciałbym zacienić podział aspektu za pomocą innego koloru. Czy jest jakiś sposób na zrobienie tego? Dzięki.Jak zmienić kolor krawędzi aspektów przy użyciu facet_grid
Odpowiedz
Chociaż roku późno, uważam, że jest to łatwo naprawić:
ggplot(mpg, aes(cty, hwy, color = factor(year)))+
geom_point()+
facet_grid(cyl ~ drv) +
theme(panel.margin=unit(.05, "lines"),
panel.border = element_rect(color = "black", fill = NA, size = 1),
strip.background = element_rect(color = "black", size = 1))
Spróbuj tego - możesz nim sterować za pomocą strip.background
, sformatowanego za pomocą połączenia element_rect
.
qplot (Highway, cty dane = mpg) + facet_grid (. ~ Producenta) +
motyw (strip.text.x = element_text (rozmiar = 8, barwa = "Red", k = 90 ), strip.background = element_rect (wypełnić = "granatowy", kolor = nA))
To ładnie kolory teł prostokąt, gdzie pojawiają się etykiety aspekt, ale nie zmieniać luki między kategoriami - białe linie, które biegną wzdłuż działki oddzielającej grupy aspektów. –
może trzeba użyć ggplot
„s tabeli układu i gtable
funkcje.
library(ggplot2)
library(gtable)
library(grid)
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() +
facet_grid(am ~ cyl)
## Get the plot grob
gt <- ggplotGrob(p)
## Check the layout
gtable_show_layout(gt) # Vertical gaps are in columns 5 and 7
# and span rows 4 to 9
# Horizontal gap is in row 8
# and spans columns 4 to 9
## To automate the selection of the relevant rows and columns:
## Find the panels in the layout
## (t, l, b, r refer to top, left, bottom, right);
## The gaps' indices are one to the right of the panels' r index (except the right most panel);
## and one below the panels' b index (except the bottom most panel);
## Rmin and Rmax give the span of the horizontal gap;
## Bmin and Bmax give the span of the vertical gap;
## cols and rows are the columns and row indices of the gaps.
panels = subset(gt$layout, grepl("panel", gt$layout$name), t:r)
# The span of the horizontal gap
Rmin = min(panels$r)
Rmax = max(panels$r) + 1
#The span of the vertical gap
Bmin = min(panels$t) - 1
Bmax = max(panels$t)
# The columns and rows of the gaps
cols = unique(panels$r)[-length(unique(panels$r))] + 1
rows = unique(panels$t)[-length(unique(panels$t))] + 1
# The grob - orange rectangle
g = rectGrob(gp = gpar(col = NA, fill = "orange"))
## Add orange rectangles into the vertical and horizontal gaps
gt <- gtable_add_grob(gt,
rep(list(g), length(cols)),
t=Bmin, l=cols, b=Bmax)
gt <- gtable_add_grob(gt,
rep(list(g), length(rows)),
t=rows, l=Rmin, r=Rmax)
## Draw it
grid.newpage()
grid.draw(gt)
To jest naprawdę doskonałe. Zastanawiam się, czy to podejście pozwoli na modyfikację obiektu 'ggplot', który spowoduje powstanie innego obiektu' ggplot', który może mieć warstwy 'ggplot' dodane w późniejszym kroku. Na niepowiązanej notatce miałem problem z dodaniem przypisów w obiektach 'ggplot' i utrzymywaniu w nich klasy' ggplot'. Próbowałem wszystkich metod wymienionych w innym miejscu na stackoverflow. Czy 'gtable' może być alternatywnym podejściem? –
Myślę, że odpowiedź na twoje pytania brzmi "tak". 'gtable' pozwala na pewne modyfikacje początkowych ggplotów. Na przykład, można dodać wiersze i kolumny do układu ggplot, a następnie wstawić do nich groby. @ baptiste zebrał kilka notatek na [https://github.com/baptiste/gtable/wiki/Description](https://github.com/baptiste/gtable/wiki/Description) –
Ogólnie będę miał działki z różną liczbą rzędów/kolumn aspektu. Czy myślisz o wrażliwym na dane sposobie określenia 'Rmin' i' Bmin'? –
- 1. wydrukuj tylko kilka aspektów w facet_grid
- 2. W przeglądarce krawędzi, jak zmienić kolor tekstu zastępczego przy użyciu CSS?
- 3. W ggplot2, jak mogę zmienić granicę wybranych aspektów?
- 4. Zmienić kolor obramowania dolnej przy użyciu jquery?
- 5. Jak zmienić kolor nominalnej działce przy użyciu matplotlib
- 6. Jak zmienić kolor w TemplateField przy użyciu Eval
- 7. Warunkowo zmienić tło panelu z facet_grid?
- 8. jak zmniejszyć pionowe odstępy między etykietami aspektów przy użyciu facet_wrap?
- 9. Dodaj "tytuł" do moich czynników przy użyciu facet_grid
- 10. Jak zmienić kolor JSeparatora?
- 11. Jak zmienić kolor UIFont?
- 12. Jak zmienić kolor JProgressBar?
- 13. Swift Jak zmienić kolor tytułu UIAlertController Kolor
- 14. Jak zmienić kolor przycisku wyłączonego Bootstrap?
- 15. Jak zmienić rozdzielczość rastra przy użyciu GDAL?
- 16. Jak zmienić opcje zaznaczenia przy użyciu JavaScript
- 17. Jak zmienić nazwę pliku przy użyciu NSFileManager
- 18. Jak zmienić kolejność pudełek przy użyciu ggplot2?
- 19. Jak zmienić kolor <ion-card> użyciu ionic2
- 20. R + ggplot: jak zmienić opcje dla poszczególnych aspektów
- 21. Jak zmienić kolor otwartego przełącznika rozwijanego Bootstrap?
- 22. Jak mogę zmienić kolor TPanel przy włączonych stylach VCL?
- 23. Jak zmienić kolor tekstu Androida ToogleButton przy zmianie stanu?
- 24. Jak zmienić kolor czcionki Niesamowite ułożone ikony przy aktywowaniu
- 25. Jak zmienić kolor paska przewijania
- 26. Jak zmienić kolor elementów QStringListModel?
- 27. Jak zmienić kolor tekstu JButton'a
- 28. Jak zmienić kolor uchwytów EditText?
- 29. Jak zmienić kolor tła JOptionPane?
- 30. Jak zmienić kolor tła TextBox?
To wygląda na proste rozwiązanie, ale nie sądzę, że może ono być uogólnione na wszystkie sytuacje. Co się stanie, jeśli chce się więcej miejsca między panelami? Lub nawet domyślny margines panelu? Rozmiar linii granicznych panelu musi zostać zwiększony. Ale wtedy grubsze linie graniczne są rysowane wewnątrz i na zewnątrz panelu.Fabuła nie tylko wygląda brzydko, ale ostatecznie traci informacje; na przykład, z wystarczająco grubą linią, górne prawe punkty w środkowym panelu w górnym rzędzie znikają pod linią graniczną. –
A może ktoś chce mieć kolor inny niż czarny? –
OK, jest kilka rzeczy, które możesz zrobić, dopasowując zmienne w motywie **() **: * Zmień kolor w elemencie element_rect (color = "black" ...) dla obu elementów ** panel.border ** i * * strip.background ** * Zwiększ odstępy, zwiększając ** panel.margin = jednostka (.05, "linie") ** Aby rozwiązać problem grubych linii obejmujących punkty, możesz zmienić x & y granice działek – yake84