如何更改 ggplot2 geom_raster 中的插值/平滑

Posted

技术标签:

【中文标题】如何更改 ggplot2 geom_raster 中的插值/平滑【英文标题】:How to change interpolation / smoothing in ggplot2 geom_raster 【发布时间】:2018-11-25 14:55:32 【问题描述】:

是否可以更改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 -- see this post -- 但我想通过填充计算值而不是计算密度。

【问题讨论】:

说,你从哪里得到这个scale_fill_viridis_c?如果viridis 我找到scale_fill_viridis 但没有scale_fill_viridis_c @Hack-R 来自 ggplot2(版本 2.2.1.9000)。 你有解决这个问题的办法吗? @Tjebo 不,不是今天 【参考方案1】:

AFAIK,除了打开或关闭它之外,您无法操纵网格函数的插值。相反,ggfx 包允许您使用您选择的“sigma”参数来模糊特定图层。示例如下:

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.

由reprex package (v2.0.0) 于 2021 年 8 月 29 日创建

【讨论】:

以上是关于如何更改 ggplot2 geom_raster 中的插值/平滑的主要内容,如果未能解决你的问题,请参考以下文章

R:我正在从矩阵制作热图,但 ggplot2 geom_raster 将(数字)值重新排序为字母

R 数据可视化 —— 聚类热图 pheatmap

如何更改使用 ggplot2 制作的绘图的背景颜色

如何更改ggplot2中的默认字体大小

如何更改ggplot2中散点图的颜色

使用ggplot2时如何更改箱线图的顺序?