Наложение нескольких графиков geom_raster с разными градиентами - PullRequest
0 голосов
/ 27 октября 2018

Я хотел бы построить с gglot geom_raster 2D-график с 2 различными градиентами, но я не знаю, есть ли быстрое и элегантное решение для этого, и я застрял.

Эффект, который я хотел бы видеть, это наложение нескольких geom_raster, по сути.Кроме того, мне нужно решение, которое масштабируется до N различных градиентов;позвольте мне привести пример с N = 2 градиентами, которым легче следовать.

Сначала я создаю сетку из 100 и 100 позиций X и Y

# the domain are 100 points on each axis
domain = seq(0, 100, 1) 

# the grid with the data
grid = expand.grid(domain, domain, stringsAsFactors = FALSE)
colnames(grid) = c('x', 'y')

Затем вычисляю одно значение дляточка сетки;представьте что-нибудь глупое, подобное этому

grid$val = apply(grid, 1, function(w) { w['x'] * w['y'] }

Я знаю, как построить это с помощью пользовательского градиента от белого к красному

ggplot(grid, aes(x = x, y = y)) +
  geom_raster(aes(fill = val), interpolate = TRUE) +
  scale_fill_gradient(
      low = "white", 
      high = "red", aesthetics = 'fill')

Но теперь представьте, что у меня есть другое значение для каждой точки сетки

grid$second_val = apply(grid, 1, function(w) { w['x'] * w['y'] + runif(1) }

Теперь, как мне построить сетку, где каждая позиция "(x, y)" окрашена с наложением:

  • 1 градиента от белого к красному со значением, заданным какval
  • 1 градиент "от белого к синему" со значением, заданным как second_val

По существу, в большинстве приложений val и second_val будут двумя функциями плотности 2Dи я хотел бы, чтобы каждый градиент представлял значение плотности.Мне нужны два разных цвета, чтобы увидеть различное распределение значений.

Я видел этот похожий вопрос , но не знаю, как использовать этот ответ в моем случае.

...