如何使用ggplotly绘制3D图形?

3

我正在运行来自博客帖子的以下示例,以绘制3D图表。 代码运行没有任何错误,但输出结果与预期不符。以下是代码:

library(plotly)
pp <- function (n,r=4) {
    x <- seq(-r*pi, r*pi, len=n)
    df <- expand.grid(x=x, y=x)
    df$r <- sqrt(df$x^2 + df$y^2)
    df$z <- cos(df$r^2)*exp(-df$r/6)
    df
}
qplot(x, y, data=pp(100), geom="tile", fill=z)
ggplotly()

下面是我期望的效果 在此输入图片描述


1
请定义 py。我猜你只是想运行 ggplotly() - Axeman
有什么问题吗?它是否生成错误?如果是,错误信息是什么?您是否看到了一个看起来不对的图形?您的R会话是否崩溃? - Gregor Thomas
@Gregor 抱歉,现在应该更清楚了。 - Dambo
1
当我运行你的代码时,会出现一堆弃用错误。plotly发展非常迅速,这篇博客文章已经写了几年了,可能有一种新的正确语法来完成这个任务...?? - Ben Bolker
1个回答

4
我安装了plotly,从您的问题中复制代码后运行得很好。但它确实没有返回您附加的3D图。原因是现在ggplolty()将您的ggplot“转换为plotly图表”。博客文章中给出的示例很可能已经过时,正如B. Bolker在评论中所说。

然而,这也有一个好处。plotly仍然有面向曲面图的选项(请参见:plotly文档)。这意味着您可以使用以下代码重新创建示例:

library(reshape2)
library(plotly)
#
pp <- function (n,r=4) {
    x <- seq(-r*pi, r*pi, len=n)
    df <- expand.grid(x=x, y=x)
    df$r <- sqrt(df$x^2 + df$y^2)
    df$z <- cos(df$r^2)*exp(-df$r/6)
    df
}
data_xyz <- pp(100)
data_z <- acast(data_xyz, x~y, value.var = "z")
plot_ly(z = data_z,  type = "surface")

如果我正确地理解了我链接的博客帖子,那么实际上这就是运行该代码后我应该得到的输出。 - Dambo
@Dambo 嘿,谢谢你的澄清。请查看我的编辑答案。我希望它告诉你想知道的内容!如果是这样,请告诉我 =) - Daniel
感谢注意到我发布的图片与你的解决方案之间存在任何差异的任何人:在图片中,图形是倒置的。 - Dambo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接