> On 12 Apr 2017, at 09:08, dncdd <dn...@aliyun.com> wrote:
> 
> Sorry, I might make the question complicated. 
> 
> I can use filled.contour() to plot mini data 1(three dimension on flat 
> surface). Now my problem is on mini data 2. Let's unfold the mini data 2.
> 
> 
>   r1dn   r2dn   tdn    fdn
>      x,     y,     z,     v
>     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
> 
> 
> When x is 0.8, y is 0.8, z is 0.1, then v is 0.3.  So v is not limited by a 
> function like v ~ f(x,y,z). I mean x,y,z is just like labels on the 3d space.
> You have give me many suggestions. I think that maybe scatterplot with colors 
> on v on 3d space is a solution. I will try it later. At the beginning, I was 
> wondering 
> a 3d surface plot or 3d filled.contour on 3d space. I am not sure whether it 
> is possble.


First of all, v is function of x,y,z according to sample above wheter you 
accept or not.  Because x,y,z represents coordinates of v in the 3D space and 
if someone wants to plot contours between those points, he/she needs a v(x,y,z) 
function that can calculate values (v) between x,y,z coordinates. Let’s get 
back to main question.

I think you want something like as [1] and [2]. Your best shot is misc3d 
package. I created a simple example how to plot isosurfaces and you can find 
different strategies to plot 4D data in 3D space at [3].

#——————————
library(misc3d)
# let's create a function to create a sample data to visualize
f <- function(x, y, z) sin(x) * sin(y) * sin(z)
x <- z <- seq(0, pi, length.out = 15)
y <- seq(-pi, pi, length.out = 15)
d <- expand.grid(x, y, z)
colnames(d) <- c("x", "y", "z")
d$v <- with(d, f(x, y, z))

# this is your initial data
head(d)

k <- 16 # number of contours
alpha_min_max <- c(0.2, 0.6)
colf <- colorRampPalette(rev(RColorBrewer::brewer.pal(11, "RdBu")))

# isosurfaces are at here
lev <- seq(min(d$v), max(d$v), length.out = k)
# inner isosurfaces are more solid, outer ones are more transparent.
# So, we can see inner isosurfaces by x-ray vision.
alpha <- seq(alpha_min_max[1], alpha_min_max[2], length.out = k)

rgl::plot3d(x, y, z, type = "n", aspect = TRUE) # create scene
misc3d::contour3d(f, lev, x, y, z, color = colf(k), alpha = alpha,
          smooth = 3, engine = "rgl", add = TRUE)
rgl::aspect3d(1, 2, 1) # set aspect, y is different from x and z.
#——————————


1- http://stackoverflow.com/a/11319175/557884 
<http://stackoverflow.com/a/11319175/557884>
2- http://mathematica.stackexchange.com/a/19819 
<http://mathematica.stackexchange.com/a/19819>
3- https://www.jstatsoft.org/article/view/v028i01 
<https://www.jstatsoft.org/article/view/v028i01>






        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to