[R] How to create surface3d plot with surface data

Duncan Murdoch murdoch.duncan at gmail.com
Mon May 20 11:47:09 CEST 2013


On 13-05-20 12:17 AM, Nguyen Hoang wrote:
> I'm very new to R, and I'm having trouble figuring out a 3d surface
> plot of the data. I typically have something like this:
>
>
>
>
>
>
>    0.1
>    0.2
>    0.3
>    0.4
>    0.5
>
>
>    0.001
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>
>
>    0.0025
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>
>
>    0.0039
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>
>
>    0.0061
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>
>
>    0.0095
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>    40960.16
>
>
>    0.0147
>    40960.16
>    40960.16
>    40960.16
>    33756.49
>    25979.93
>
>
>    0.023
>    40960.16
>    40960.16
>    28130.81
>    19838.51
>    14891.95
>
>
>    0.0358
>    40960.16
>    26877.74
>    16258.07
>    11004.66
>    7898.252
>
>
>    0.0558
>    35941.34
>    15461.96
>    8752.924
>    5487.987
>    3601.922
>
>
>    0.087
>    21231.18
>    8254.491
>    4115.487
>    2189.69
>    1152.315
>
>
>    0.1357
>    11883.95
>    3815.37
>    1425.492
>    464.9616
>    84.35834
>
>
>    0.2115
>    6029.579
>    1264.774
>    166.2719
>    0
>    0
>
>
>    0.3296
>    2500.958
>    115.8725
>    0
>    0
>    0
>
>
>    0.5138
>    605.4039
>    0
>    0
>    0
>    0
>
>
>    0.801
>    0
>    0
>    0
>    0
>    0
>
>
>    0.9999
>    0
>    0
>    0
>    0
>    0
>
> a first row corresponding to the values in y and a first column
> corresponding to the values in x,the matrix of residual values are in
> z as the following:
>
>
>> x1 <- t(x) #transpose x
>     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
> V1  0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9     1
>> y1 <- t(y)
>        [,1]
> V1  0.0010
> V2  0.0010
> V3  0.0039
> V4  0.0061
> V5  0.0095
> V6  0.0147
> V7  0.0230
> V8  0.0358
> V9  0.0558
> V10 0.0870
> V11 0.1357
> V12 0.2115
> V13 0.3296
> V14 0.5138
> V15 0.8010
> V16 0.9999
>
>
>> z_t <- t(z)
>          [,1]     [,2]     [,3]     [,4]     [,5]     [,6]      [,7]      [,8]
> V1  40960.16 40960.16 40960.16 40960.16 40960.16 40960.16 40960.165 40960.165
> V2  40960.16 40960.16 40960.16 40960.16 40960.16 40960.16 40960.165 26877.741
> V3  40960.16 40960.16 40960.16 40960.16 40960.16 40960.16 28130.814 16258.071
> V4  40960.16 40960.16 40960.16 40960.16 40960.16 33756.49 19838.507 11004.663
> V5  40960.16 40960.16 40960.16 40960.16 40960.16 25979.93 14891.946  7898.252
> V6  40960.16 40960.16 40960.16 40960.16 35282.13 20810.88 11618.426  5865.759
> V7  40960.16 40960.16 40960.16 40960.16 29505.17 17131.90  9301.074  4447.296
> V8  40960.16 40960.16 40960.16 40960.16 25179.81 14384.26  7581.456  3412.924
> V9  40960.16 40960.16 40960.16 36868.08 21822.20 12257.56  6260.442  2634.903
> V10 40960.16 40960.16 40960.16 32663.23 19142.03 10565.56  5218.556  2036.595
>            [,9]        [,10]       [,11]     [,12]     [,13]    [,14] [,15] [,16]
> V1  35941.3351 21231.183500 11883.95464 6029.5794 2500.9576 605.4039     0     0
> V2  15461.9567  8254.491283  3815.37041 1264.7739  115.8725   0.0000     0     0
> V3   8752.9239  4115.487198  1425.49197  166.2719    0.0000   0.0000     0     0
> V4   5487.9866  2189.690272   464.96165    0.0000    0.0000   0.0000     0     0
> V5   3601.9222  1152.314526    84.35834    0.0000    0.0000   0.0000     0     0
> V6   2406.3472   561.860696     0.00000    0.0000    0.0000   0.0000     0     0
> V7   1606.2609   229.200968     0.00000    0.0000    0.0000   0.0000     0     0
> V8   1054.1819    59.850348     0.00000    0.0000    0.0000   0.0000     0     0
> V9    668.1935     1.390629     0.00000    0.0000    0.0000   0.0000     0     0
> V10   399.1614     0.000000     0.00000    0.0000    0.0000   0.0000     0     0
>
>
> I tried to use surface3d() and persp3d(), but the results was error.
>
>
>> library(rgl)
>> surface3d(x1,y1,z_t)
> Error in rgl.surface(x = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9,  :
>    bad dimension for rows
>
>
> What should I do?

Don't convert x and y into matrices, leave them as vectors.

Unlike persp, persp3d allows you to specify x and/or y as matrices, but 
then they need to be the same shape as z. It was complaining because it 
thought you had done that, but got the shape wrong.

Duncan Murdoch



More information about the R-help mailing list