【问题标题】:how to plot three dimension data or four dimension data to filled contour plot or surface plot in R如何将三维数据或四维数据绘制到R中的填充等高线图或曲面图
【发布时间】:2017-09-05 22:38:36
【问题描述】:

环境

R 3.3.2

当我有 mini data 1 之类的数据时:

rdn<-c(0.8,1.8,2.8)
tdn<-c(1,2,3,4,5,6,7,8,9)

idn<-matrix(c(0.3, 0.3, 0.3, 0.2, 0.2, 0.4, 0.1, 0.1, 0.5, 0, 0.2, 0.5, 0, 0.3, 0.6, 0, 0.4, 0.6, 0, 0.4, 0.6, 0, 0.5, 0.7, 0, 0.5, 0.7), nrow=9, ncol=3, byrow=T)

矩阵看起来像(3*9 = 27 个数据元素):

0.3, 0.3, 0.3, 
0.2, 0.2, 0.4, 
0.1, 0.1, 0.5, 
0, 0.2, 0.5, 
0, 0.3, 0.6, 
0, 0.4, 0.6, 
0, 0.4, 0.6, 
0, 0.5, 0.7, 
0, 0.5, 0.7

然后我可以得到一个带有参数 x,y,z 的填充轮廓。 x 是 tdn,y 是 rdn,z 是矩阵。 I already get this several month ago using filled.contour。 rdn 和 tdn 仅用作 x、y 的标签。矩阵似乎是轮廓线。而且矩阵数据不是rdn和tdn的函数。

我目前的问题是:

如果我有三维数据迷你数据2

r1dn<-c(0.8,1.8,2.8)
r2dn<-c(0.8,1.8,2.8)
tdn<-c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)

和(3*3*9 = 81 个数据元素):

 0.8                  1.8                  2.8
0.8  1.8  2.8       0.8  1.8  2.8        0.8  1.8  2.8

--------------- 81 ---- elements ----------------------

0.3, 0.3, 0.3,      0.3, 0.3, 0.5,       0.3, 0.3, 0.3, 
0.2, 0.2, 0.4,      0.2, 0.4, 0.4,       0.4, 0.2, 0.5,
0.1, 0.1, 0.5,      0.2, 0.3, 0.5,       0.4, 0.4, 0.5, 
0, 0.2, 0.5,        0.2, 0.2, 0.6,       0.4, 0.5, 0.6, 
0, 0.3, 0.6,        0.3, 0.3, 0.6,       0.5, 0.5, 0.7, 
0, 0.4, 0.6,        0.2, 0.5, 0.7,       0.5, 0.6, 0.7, 
0, 0.4, 0.6,        0, 0.5, 0.6,         0.5, 0.6, 0.9,  
0, 0.5, 0.7,        0, 0.6, 0.8,         0.5, 0.7, 0.8, 
0, 0.5, 0.7         0, 0.6, 0.8          0.5, 0.8, 0.9       

我用谷歌搜索了许多表面和轮廓代码,但我仍然没有找到一些三维数据的代码。如何在 R 中做到这一点?比如说,x 是 r1dn,y 是 r2dn,z 是 tdn,那么三维数据(我的意思是 81 个元素的数据)呢? ggplot 是否可以绘制三维填充轮廓或曲面图?还是其他替代解决方案?

我所期望的只是一个颜色变化平滑且没有网格的 3d 图。

看起来像:

接下来的三个数字没有网格

那些应该是 3d 填充轮廓或 3d 曲面图。

感谢您的宝贵时间。

编辑

展开所有数据迷你数据2后看起来像四个维度:

r1dn   r2dn   tdn    fdn
 x,     y,     z,     f
0.8    0.8    0.1    0.3
0.8    0.8    0.2    0.2
0.8    0.8    0.3    0.1
0.8    0.8    0.4    0
0.8    0.8    0.5    0
0.8    0.8    0.6    0
0.8    0.8    0.7    0
0.8    0.8    0.8    0
0.8    0.8    0.9    0
0.8    1.8    0.1    0.3
0.8    1.8    0.2    0.2
0.8    1.8    0.3    0.1
0.8    1.8    0.4    0.2
0.8    1.8    0.5    0.3
0.8    1.8    0.6    0.4
0.8    1.8    0.7    0.4
0.8    1.8    0.8    0.5
0.8    1.8    0.9    0.5
0.8    2.8    0.1    0.3
0.8    2.8    0.2    0.4
0.8    2.8    0.3    0.5
0.8    2.8    0.4    0.5
0.8    2.8    0.5    0.6
0.8    2.8    0.6    0.6
0.8    2.8    0.7    0.6
0.8    2.8    0.8    0.7
0.8    2.8    0.9    0.7
1.8    0.8    0.1    0.3
1.8    0.8    0.2    0.2
1.8    0.8    0.3    0.2
1.8    0.8    0.4    0.2
1.8    0.8    0.5    0.3
1.8    0.8    0.6    0.2
1.8    0.8    0.7    0
1.8    0.8    0.8    0
1.8    0.8    0.9    0
1.8    1.8    0.1    0.3
1.8    1.8    0.2    0.4
1.8    1.8    0.3    0.3
1.8    1.8    0.4    0.2
1.8    1.8    0.5    0.3
1.8    1.8    0.6    0.5
1.8    1.8    0.7    0.5
1.8    1.8    0.8    0.6
1.8    1.8    0.9    0.6
1.8    2.8    0.1    0.5
1.8    2.8    0.2    0.4
1.8    2.8    0.3    0.5
1.8    2.8    0.4    0.6
1.8    2.8    0.5    0.6
1.8    2.8    0.6    0.7
1.8    2.8    0.7    0.6
1.8    2.8    0.8    0.8
1.8    2.8    0.9    0.8
2.8    0.8    0.1    0.3
2.8    0.8    0.2    0.4
2.8    0.8    0.3    0.4
2.8    0.8    0.4    0.4
2.8    0.8    0.5    0.5
2.8    0.8    0.6    0.5
2.8    0.8    0.7    0.5
2.8    0.8    0.8    0.5
2.8    0.8    0.9    0.5
2.8    1.8    0.1    0.3
2.8    1.8    0.2    0.2
2.8    1.8    0.3    0.4
2.8    1.8    0.4    0.5
2.8    1.8    0.5    0.5
2.8    1.8    0.6    0.6
2.8    1.8    0.7    0.6
2.8    1.8    0.8    0.7
2.8    1.8    0.9    0.8
2.8    2.8    0.1    0.3
2.8    2.8    0.2    0.5
2.8    2.8    0.3    0.5
2.8    2.8    0.4    0.6
2.8    2.8    0.5    0.7
2.8    2.8    0.6    0.7
2.8    2.8    0.7    0.9
2.8    2.8    0.8    0.8
2.8    2.8    0.9    0.9

嗯,数据mini data 1也可以展开成3维,可以在2d plot中通过filled.contour来绘制,所以应该有一种方法可以用3dfilled.contour来绘制迷你数据2对吗?

【问题讨论】:

    标签: r ggplot2 data-visualization contour surface


    【解决方案1】:

    这应该可以帮助您入门。我尝试使用您的数据,但是当您扩展网格时,当您想要一个概述该体积的表面时,您会得到大量的点。

    require(akima)
    require(rgl)
    
    r1dn<-runif(5, min = 3, max = 10)
    r2dn<-runif(5, min = 0, max = 5)
    tdn<-rnorm(5, 0, 5)
    
    #interp is from the akima package so you can work with non-square data in your contour
      df <- as.data.frame(interp2xyz(interp(x=r1dn, y=r2dn, z=tdn)))
    
    plot3d(df) # What it looks like in 3d
    
    #what it looks like projected into 2d
      ggplot(df, aes(x=x,y=y,z=z, fill=z)) + 
        geom_contour(binwidth=0.1, aes(color= ..level..)) + 
        theme_classic()
    

    【讨论】:

    • interp2xyz 似乎使矩阵数据成为 x,y,z 的函数?但是,我的数据矩阵不是 x,y,z 的函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2017-11-23
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多