有人有任何建议,或者可以给我指出资源,以帮助将数据帧转换为矩阵以在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
这根本不是底层数据的样子。
这里有什么建议吗?我的预感是问题是由转换为矩阵引起的。如果是这样,任何有关如何将数据帧的列映射到 x-y-z 表面的指针都非常感谢
矩阵中
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"))