r - 如何填写stat_summary_2d ggplot

标签 r ggplot2

我有一个非常基本的 ggplot 问题。我想知道是否有一种方法可以让 ggplot 自动用代表零的方 block 填充该图中的所有空方 block 。

enter image description here

我想要的代码示例

Matrix <- as.data.frame( cbind(rnorm(10), rnorm(10), rnorm(10)))
d <- ggplot(Matrix, aes( z = V3, V1, V2)) 
d +  stat_summary_2d(bins = 10)

我也知道存在 geom_raster 函数,但这给了我:

enter image description here

而不是像这样的光滑表面:

enter image description here

这是我对 ggplot 文档的期待。

栅格的代码是:

ggplot(Matrix, aes(V1, V2)) + 
geom_raster(aes(fill = V3))

最佳答案

对于你看到的漂亮的“光滑表面”,ggplot2 期望你给它一堆标绘点,它会使用 MASS::kde2d 计算密度() 核密度函数。我认为您要做的是使用一个数据集,其中每个点的值都是已知的,并且您想要平滑中间空间的颜色。

我从来没有找到如何单独使用 ggplot2 函数来做到这一点。因为你假设点之间存在空间关系(越近越强烈,越远越不强烈),这个问题可能最好使用专注于空间插值和 IDW(反距离加权)的包来解决.本章解释了如何做以及它是如何工作的: https://mgimond.github.io/Spatial/interpolation-in-r.html

我相信 geom_raster() 产生小点的原因是这些点在 x 轴和 y 轴上的间隔不均匀。如果我正确理解代码,该函数会寻找最小的公分母并创建匹配的像素图 block 大小。你的很不均匀,所以瓷砖很小。 stat_summary_2d(bins = 5, fun = "sum") 会让你更接近,但它不会插入两者之间的空间。

作为解决方法,如果您的数据集不是很大并且您的 z 值可以变成整数,您可以使用 tidyr::uncount() 为每个 z 值创建一个点。我不会将它用于非常大的数据集,但在紧要关头,它会做你想做的事。

df <-
  tibble(
    x = rnorm(10),
    y = rnorm(10),
    z = floor(rnorm(10)+10)
  ) %>% 
  uncount(z)

ggplot(df, aes(x, y)) +
  stat_density_2d(
    aes(fill = stat(density)), 
    geom = "raster", contour = FALSE
  ) +
  geom_jitter(width = 0.1, height = 0.1) 

enter image description here

关于r - 如何填写stat_summary_2d ggplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54951572/

相关文章:

r - 具有多列的数据框,从一列中的一组相同值中选择另一列中的最大值

重新排序ggplot图例标签

R:ggplot 堆积条形图,y 轴上有计数,但百分比作为标签

r - 以美国的形状排列 ggplot 刻面

r - 在绘图热图中使用离散的自定义颜色

r - ggpubr/ggbarplot 中的错误栏突然合并(没有更改代码),我怎样才能再次将它们分开?

regex - Word 不以数字或星号和数字开头(正则表达式)

根据几列删除重复项并保留数字值(如果有),如果 R 中没有数字则保留 NA

r - 在 R 中创建组合数据框

r - 更改 ggplot2 bar_plot(风车图)中条形的形状