Два цветовых градиента с помощью geom_raster и geom_point - PullRequest
1 голос
/ 21 января 2020

У меня довольно простой вопрос, но я изо всех сил пытался найти ответы в Интернете.

У меня есть тепловая карта, созданная с помощью ggplot + geom_raster . Я хочу вставить символ внутри каждого прямоугольника, чтобы они могли передавать другую часть информации. Для этого я подумал об использовании geom_point .

Графика великолепна, но у меня проблемы с цветовыми градиентами.

plot <- ggplot(data, aes(x = Var1, y = Var2, fill = value)) +
        geom_tile() + 
        geom_raster(aes(fill=value)) +
        scale_fill_gradient2(low = "gray", high = "red", mid = "#e3e3e3", midpoint = "0") + 
        geom_point(data = significance, aes(x = Var1, y = Var, color = value), shape = 21, size = 3) +
        scale_color_gradient(low = "gray", high = "gray")

Но по какой-то причине диаграмма рассеяния поглощает оба градиента, а не просто поглощает «цветной». Поскольку тепловая карта имеет значения, очень близкие к нулю, а диаграмма рассеяния имеет высокие значения, часть «заливка» делает тепловую карту полностью серой.

Я использовал это в качестве справочного материала, чтобы попробовать два градиента: Использование двух Шкала цветовых градиентов ggplot2

1 Ответ

3 голосов
/ 21 января 2020

Вот простой воспроизводимый пример, использующий заливку и цвет отдельно для растра и точек. Обратите внимание: чтобы заставить его работать, мы используем solid, а не заполненную форму для точек. И мы следим за тем, чтобы эстетика находилась в соответствующих геомах, чтобы они не передавались другим. Также обратите внимание, что, вероятно, лучше использовать другое имя значения для точек и растра, но в примере я вызываю оба параметра value, чтобы соответствовать примеру в OP.

df1 = data.frame(expand.grid(x=1:10, y=1:10), value = rnorm(100))
df2 = data.frame(x = sample(1:10), y =  sample(1:10), value = runif(10,20,50))

ggplot(df1, aes(x = x, y = y)) +
  geom_tile(aes(fill = value)) + 
  scale_fill_gradient2(low = "gray", high = "red", mid = "#e3e3e3", midpoint = 0) +
  geom_point(data = df2, aes(color = value), shape = 19, size = 3) +
  scale_color_gradient(low = "gray", high = "blue")

enter image description here

...