如何在 R 中将 4D 结果绘制为曲面?

问题描述 投票:0回答:1

我有一个包含三向交互项 (XYZ) 的模型。我已经使用这个模型来创建跨参数空间的预测。因此,我有四个信息要传达:X、Y、Z 和概率。如果我有一个简单的交互,我会用 X~Y 绘制热图,颜色为概率,但现在我需要将其作为 3D 图。

example_results <- expand.grid(x = 1:8,
                  y = seq(from = -1.85, to = 3.58, length.out = 15),
                  z = seq(from = 0, to = 2.41, length.out = 15)) %>% 
  mutate(probability = sample(seq(from = 0, to = 1, length.out = 3000), 1800))

plot_ly
似乎理解它自己在数据中的关系,而我只想绘制我的结果。
rayshader
看起来很完美,但显然无法将高度 (z) 与填充(概率)分离。
rasterVis
反对削减。

我将非常感谢任何有关如何在 R 中的一张图像中绘制所有信息的建议。

谢谢!

r plot plotly raster rayshader
1个回答
0
投票

您可以使用

rayshader
ggplot2
来完成此操作。一个问题是您发布的示例数据使用
expand.grid()
,因此
x
y
的每个值都具有
z
的每个值,因此您不会看到此数据的高度不同。我将为
x
y
的每个值选择随机行以进行演示:

library(dplyr)
dat <- example_results |>
    group_by(x, y) |>
    filter(row_number() == sample(row_number(), 1))

完成此操作后,您可以使用

ggplot2
创建两个单独的 2D 热图,一张用于高度,一张用于填充。确保将两者中的
color
设置为高度值(在本例中为
z
):

library(ggplot2)
heatmap_fill <- ggplot(dat) +
    geom_tile(aes(x, y, fill = probability, color = z)) +
    theme_void() +
    theme(legend.position = "none")

heatmap_height <- ggplot(dat) +
    geom_tile(aes(x, y, fill = z, , color = z)) +
    theme_void() +
    theme(legend.position = "none")

然后您可以使用

rayshader
来渲染它们,提供填充热图作为
ggobj
和高度热图作为
ggobj_height
。在这种情况下,我关闭了阴影,因此它可以快速渲染:

library(rayshader)
plot_gg(
    ggobj = heatmap_fill,
    ggobj_height = heatmap_height,
    multicore = TRUE, width = 5, height = 5,
    shadow = FALSE,
    raytrace = FALSE,
    scale = 500, windowsize = c(1280, 720), zoom = 0.85,
    phi = 90, theta = 0
)

我很快就会将输出以 gif 格式上传。

© www.soinside.com 2019 - 2024. All rights reserved.