Próbuję wyświetlić wiele warstw w ggplot2
, ale chciałbym użyć różnych schematów kolorów scale_fill_
dla każdej warstwy. Nie mogę tego zrobić, ponieważ dwukrotne wywołanie funkcji scale_fill_gradientn
powoduje tylko nadpisanie pierwszego połączenia drugim.Używanie więcej niż jednego `scale_fill_` w` ggplot2`
library(ggplot2)
library(reshape2)
library(RColorBrewer)
set.seed(123)
będę pierwszy wykreślić tile
siatkę (uwaga ja ustawiania kolorów z scale_fill_gradientn
):
foo <- matrix(data = rnorm(100), ncol = 10)
foo <- melt(foo)
plot <- ggplot() +
geom_tile(data = foo,
mapping = aes(x = Var1, y = Var2, fill = value)) +
scale_fill_gradientn(
colours = rev(brewer.pal(7, "BrBG"))
)
plot
Teraz chciałbym umieścić kolejną działkę na szczycie tego, ale z unikalną kolorystyką. Mogę stworzyć inną działkę dobrze:
bar <- data.frame(x = rnorm(100, 4, 1),
y = rnorm(100, 6, 1.5))
ggplot() +
stat_density_2d(data = bar,
mapping = aes(x = x, y = y, fill = ..level..),
geom = "polygon") +
scale_fill_gradientn(
colours = rev(brewer.pal(7, "Spectral"))
) + xlim(0, 10) + ylim(0, 10)
Co chciałbym zrobić, to działka druga działka na górze pierwszej, ale utrzymać kolorystyce widać powyżej. Jeśli spróbuję po prostu dodać drugą warstwę na wierzchu, nadpisuję oryginał scale_fill_gradientn
i wymuszam dwie warstwy, aby współdzieliły jeden schemat kolorów (który w tym przypadku również "kompresuje" drugą warstwę, aby spadł całkowicie w jednym kolorze:
plot <- plot +
stat_density_2d(data = bar,
mapping = aes(x = x, y = y, fill = ..level..),
geom = "polygon") +
scale_fill_gradientn(
colours = rev(brewer.pal(7, "Spectral"))
) + xlim(0, 10) + ylim(0, 10)
plot
Czy istnieje sposób, aby określić własne schematy kolorów dla każdej warstwie? Zauważyłem, że, na przykład, stat_density_2d
rozumie colour
estetyczne, ale Próbowałem określając jedną bezskutecznie (IT tylko dodaje kolor jako etykietę w legendzie i przywraca domyślny schemat kolorów):
ggplot() +
stat_density_2d(data = bar,
mapping = aes(x = x, y = y, fill = ..level.., colour = "red"),
geom = "polygon") +
xlim(0, 10) + ylim(0, 10)
Czuję, musi istnieć inny sposób ustawić schemat kolorów na zasadzie „na warstwę” zasadach, ale ja wyraźnie patrząc w niewłaściwych miejscach.
Możesz mieć tylko jedną skalę wypełnienia na wykres. – Roland
Dzięki Roland, rozumiem to, i to jest ta przeszkoda, z którą się podniecam.Chyba szukam alternatywnej metody ustawienia schematu kolorów, tak, że mogę obejść to ograniczenie? – rosscova
Możesz połączyć obie skale w jedną skalę, jeśli jesteś zadowolony z jednej legendy. Jeśli chcesz dwóch skal, musisz użyć 'ggplotGrob', a następnie zhakować na poziomie' grid', tj. Wyodrębnić groby, które potrzebujesz z drugiego wykresu i dodać je do pierwszego wykresu. Uważam jednak, że fabuła z dwoma legendami wypełnienia jest złym spiskiem. – Roland