绘制3D密度图

7
我希望创建一个具有密度的三维图。
我使用密度函数首先为特定x值创建二维图形,然后函数将创建密度并将其放入y变量中。现在我有第二组x值,再次放置到密度函数中,我得到第二组y变量,以此类推... 我希望将这些集合放入一个三维图中,希望你知道我的意思。因此我有一个密度的表面...
例如,我有:
x1<-c(1:10)
x2<-c(2:11)
y1<-c(1,1,2,1,3,4,2,3,2,2)
y2<-c(1,2,3,1,3,6,2,8,2,2)
.
.
.
.

现在,我想将第一个值1放在x轴的第一组数据上,将相应的x值放在y轴上,并将密度放在z轴上。因此,我有了一个“盘子”,x=1时有一个“盘子”,x=2时有第二个“盘子”,以此类推,这样我就得到了一个密度“山脉”。
如果你有更好的实现方法,请告诉我!我想使用persp函数来实现,如果能提供一个例子就更好了。
非常感谢您的帮助。

尝试使用?persp。但更好的选择可能是在KernSmooth包中使用类似于bkde2D的东西。 - orizon
我不明白。你的例子似乎与你的文本不符。在文本中,你说你使用density()函数创建why值,但在例子中,你似乎自己输入了这些值。你能换一种方式解释吗? - Peter Ellis
1
基本上我想重新创建这个图:http://de.wikipedia.org/wiki/Datei:GBM_density_develop.png我知道我之前发过一篇帖子,但是没有得到任何有用的答案。你已经在我的其他帖子中评论过了,但是你并没有帮助我!所以我想做一个三维图表,用于我的演示文稿,我想做一个三维密度图。对于每个x值(每个时间点),我都有不同股票价格的密度。这就是我想要的。我知道persp存在,但我不知道如何实现它!@PeterEllis - user1690846
bkde2D对@orizon没有帮助。 - user1690846
如果我能理解你的问题,我会非常乐意回答它!但是很遗憾,这个最新链接并没有帮助到我。这只是一张图片,没有任何关于它所展示内容的描述,也没有与你的问题之间明显的联系。首先,图片中命名的两个维度是时间和S,密度是垂直(z)轴。而你的问题则提到了y是由density()函数从任意输入的x创建的。这怎么可能与你发布的图片有关呢? - Peter Ellis
@PeterEllis,我是在讨论以下帖子:http://stats.stackexchange.com/questions/44276/how-to-plot-3d-gbm 和 http://stackoverflow.com/questions/13387119/how-can-i-recreate-this-3d-histogram。我在这篇文章中发布的只是我如何重新创造这张图片的想法。背后的原理是我想用3D建模来展现GBM,包括漂移和波动性,随着时间的增加而不断增长,就像您在图表中看到的那样。所以,我想在演示文稿中实现一个美观酷炫的三维图形。我认为最好使用persp来制作它,但我不知道该如何实现。 - user1690846
2个回答

11

在 Peter 的回答基础上,使用 plotly 库可以使绘图更加有趣、漂亮和交互性。

x <- rnorm(1000)
y <- 2 + x*rnorm(1000,1,.1) + rnorm(1000)
library(MASS)
den3d <- kde2d(x, y)

# the new part:
library(plotly)
plot_ly(x=den3d$x, y=den3d$y, z=den3d$z) %>% add_surface()

这将给出:

输入图像描述


11

很抱歉,我无法理解你的问题。但是,以下是我认为你需要绘制的类型的图形,基于你首先估计双变量密度的两维数据集:

x <- rnorm(1000)
y <- 2 + x*rnorm(1000,1,.1) + rnorm(1000)
library(MASS)
den3d <- kde2d(x, y)
persp(den3d, box=FALSE)

在此输入图像描述

然后有很多persp的选项,可以查看。

?persp

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