【问题标题】:Contour plot or heatmap from three continuous variables来自三个连续变量的等高线图或热图
【发布时间】:2018-05-21 19:22:17
【问题描述】:

我有一个模型告诉我两个变量之间存在交互作用:a 和 b,这显着影响了我的响应变量:c。这三个都是连续的数值变量。具体c是我的响应变量的变化率,b是我的预测变量的变化率,a是年平均降雨量。分析单位是栅格中的像素。所以我的模型告诉我平均年降雨量会改变我的预测变量如何影响我的反应。

为了可视化这种交互,我想使用等值线图/热图/水平图,x 和 y 轴上带有 a 和 b,c 提供颜色来显示我的响应变量在 a 描述的空间内如何变化和 b。我可以用散点图做到这一点,但它不是很漂亮或容易解释:

qplot(b, a, colour = c) +
  scale_colour_gradient(low="green", high="red") +

当我尝试绘制等高线图/热图/水平图时,我得到的只是错误、空白图或丑陋的图。

geom_contour 给我一个错误:

ggplot(data = Mod, aes(x = Rain, y = Bomas, z = Fire)) +
  geom_contour()

Warning message:
Not possible to generate contour data

geom_raster 最初给了我Error: cannot allocate vector of size 81567.2 Gb,但是当我对我的数据进行四舍五入时,它会产生:

ggplot(data = df, aes(x = a, y = b, z = c)) +
  geom_raster(aes(fill = c))

interpolate = TRUE 添加到geom_raster 代码只会使线条有点模糊。

geom_tile 生成一个空白图,但带有 c: 比例尺

ggplot(data = df, aes(x = a, y = b, z = c)) +
  geom_tile(aes(color = c))

我也尝试过使用stat_density2d 并将填充和/或颜色设置为c,但出现错误,我也尝试在lattice 包中使用levelplot,但这会产生这个:

levelplot(c ~ a * b, data = df,
          aspect = "asp", contour = TRUE,
          xlab = "a",
          ylab = "b")

我怀疑我遇到的问题是因为函数没有设置为处理连续的 x 和 y 变量,所有示例似乎都使用因子。我原以为我可以通过改变 bin 宽度来弥补这一点,但这似乎也不起作用。是否有一个函数可以让您制作包含 3 个连续变量的热图?或者我是否需要将我的 a 和 b 变量视为因素并手动制作一个带有适合我数据的 bin 的数据框?

如果您想自己进行实验,那么您会遇到与我遇到的类似的问题:

df<- as.data.frame(rnorm(1:1068))
df[,2] <- rnorm(1:1068)
df[,3] <- rnorm(1:1068)
names(df) <- c("a", "b", "c")

【问题讨论】:

    标签: r plot ggplot2 heatmap levelplot


    【解决方案1】:

    您可以获得自动分箱,例如使用stat_summary_2d 计算均值:

    ggplot(df, aes(a, b, z = c)) +
      stat_summary_2d() +
      geom_point(shape = 1, col = 'white') +
      viridis::scale_fill_viridis()
    

    另一个不错的选择是按第三个变量对数据进行切片,并绘制小倍数。但是,这对于随机数据并不能很好地显示:

    library(ggplot2)
    ggplot(df, aes(a, b)) +
      geom_point() +
      facet_wrap(~cut_number(c, 4))
    

    【讨论】:

    • 你知道如何扩展它以使你的第一个图中的颜色覆盖整个情节吗?
    • 您无法在没有观察值的情况下计算 bin 中的平均值。
    猜你喜欢
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多