Как изменить интерполяцию / сглаживание в ggplot2 geom_raster

Можно ли изменить уровень интерполяции (например, сглаживание, размытие) в geom_raster?

library(tidyverse)

mtcars %>%
  group_by(carb, hp = cut(mtcars$hp, 3, labels = c("low", "med", "hi"))) %>%
  summarise(mean_mpg = mean(mpg)) %>%
  ggplot(aes(carb, hp)) +
  geom_raster(aes(fill = mean_mpg), interpolate = FALSE) +
  scale_fill_viridis_c(option = "inferno")

введите описание изображения здесь

Я хотел бы контролировать степень размытия на следующем графике:

mtcars %>%
  group_by(carb, hp = cut(mtcars$hp, 3, labels = c("low", "med", "hi"))) %>%
  summarise(mean_mpg = mean(mpg)) %>%
  ggplot(aes(carb, hp)) +
  geom_raster(aes(fill = mean_mpg), interpolate = TRUE) +
  scale_fill_viridis_c(option = "inferno")

введите описание изображения здесь

Я знаю как это сделать с stat_density_2d - смотрите этот пост - но я бы хотел пропустить заполнить вычисленное значение, а не вычислять плотность.

1 ответ

AFAIK, вы не можете манипулировать интерполяцией функции сетки, кроме как просто включить или выключить ее. Вместо этого пакет ggfx позволяет размыть определенный слой с помощью параметра «сигма» по вашему выбору. Пример ниже:

      library(tidyverse)
library(ggfx)

mtcars %>%
  group_by(carb, hp = cut(mtcars$hp, 3, labels = c("low", "med", "hi"))) %>%
  summarise(mean_mpg = mean(mpg)) %>%
  ggplot(aes(carb, hp)) +
  with_blur(
    geom_raster(aes(fill = mean_mpg), interpolate = FALSE),
    sigma = 10
  ) +
  scale_fill_viridis_c(option = "inferno")
#> `summarise()` has grouped output by 'carb'. You can override using the `.groups` argument.
#> Warning: Raster pixels are placed at uneven horizontal intervals and will be
#> shifted. Consider using geom_tile() instead.

Создано 29.08.2021 пакетом REPEX (v2.0.0)

Другие вопросы по тегам