我試圖在ggplot2
中顯示多個圖層,但是我想爲每個圖層使用不同的scale_fill_
配色方案。我似乎無法做到這一點,因爲撥打scale_fill_gradientn
這樣的東西只是用第二次覆蓋第一個電話。在`ggplot2`中使用多個`scale_fill_`
library(ggplot2)
library(reshape2)
library(RColorBrewer)
set.seed(123)
我會先繪製一個tile
格(請注意我設置的顏色與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
現在我想換一種劇情之上那一個,但有一個獨特的配色方案。我可以創建一個不同的情節就好:
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)
我想要做的是情節上的第一個頂部的第二曲線,但保持你在上面看到的配色方案。如果我嘗試簡單地在第一層上添加第二層,我將覆蓋原始的scale_fill_gradientn
,並強制這兩層共享一種配色方案(在這種情況下,也會「壓縮」第二層完全落入一種顏色:
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
是否有指定每一層單獨的配色方案的方法嗎?我注意到,例如,stat_density_2d
理解一個colour
審美,但我已經試過指定一個無濟於事(它僅在圖例中添加顏色作爲標籤,並將顏色方案恢復爲默認):
ggplot() +
stat_density_2d(data = bar,
mapping = aes(x = x, y = y, fill = ..level.., colour = "red"),
geom = "polygon") +
xlim(0, 10) + ylim(0, 10)
我覺得必須有一個不同的方法來設置「每個層」的基礎上的配色方案,但我清楚地找錯了地方。
每個圖只能有一個填充比例。 – Roland
謝謝羅蘭,我明白了,那就是我反彈的障礙。我想我正在尋找另一種設置顏色方案的方法,以便我可以解決這個限制? – rosscova
如果您對一個圖例感到滿意,您可以將兩個比例組合成一個比例。如果你想要兩個比例尺,你需要使用'ggplotGrob',然後在'grid'級別進行破解,即從第二個圖中提取需要的庫,並將它們添加到第一個圖中。不過,我相信有兩個填充圖例的情節是一個糟糕的情節。 – Roland