gpt4 book ai didi

r - 如何填写stat_summary_2d ggplot

转载 作者:行者123 更新时间:2023-12-01 06:25:30 24 4
gpt4 key购买 nike

我有一个非常基本的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com