R 中的 3d 曲面图 - 从数据帧到plot_ly 矩阵的转换

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

有人有任何建议,或者可以给我指出资源,以帮助将数据帧转换为矩阵以在plot_ly 3d曲面图中使用吗? 有几个与此类似的问题,但似乎没有一个能解决问题。

我有一个数据框

df
,其中包含 A、B 和 C 列。我想在 x-y 平面上绘制 A 和 B,并将 C 作为 z 变量。

我可以使用

dfm <- as.matrix(df, rownames.force = NA)
将我的数据帧转换为矩阵,然后我可以调用plot_ly 并对列重新排序,如下所示:

fig <-  plot_ly(z=~dfm[,c(1,3,2)], type = "surface")
fig <- fig %>% add_surface()
fig

但这给出了一个非常奇怪的结果: enter image description here

这根本不是底层数据的样子。

这里有什么建议吗?我的预感是问题是由转换为矩阵引起的。如果是这样,任何有关如何将数据帧的列映射到 x-y-z 表面的指针都非常感谢

r 3d plotly surface
1个回答
0
投票

矩阵中

plotly
想要的是
z
值。 矩阵的行对应于
y
值,列对应于
x
值。 如果您的数据帧包含
x
y
z
值,那么转换为这种格式很大程度上取决于您拥有的值类型。

最简单的情况是您的数据确实符合

plotly
想要的格式,并且
x
y
值重复。 这是可能的,但并不常见。

更常见的情况是,您有非结构化的

x
y
位置,并测量了每个位置的
z
值。 然后您需要进行一些计算以将它们放在网格上。
interp
包可以做到这一点。 例如:

set.seed(123)
df <- data.frame(x = rnorm(100), y = rnorm(100, mean = 10), z = rnorm(100, mean = 20))
xyz <- with(df, interp::interp(x, y, z))
library(plotly)
with(xyz, plot_ly(x = ~x, y = ~y, z=~z, type="surface")) 

产生这个: screenshot

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