I have what is probably a noob question, but.... I am trying to create a 3d plot to illustrate the range of values for the following simple function: A = B*(C/D) B, C, and D are independent variables whose range are equal (e.g. 1 to 3 inclusive) I figure it's not possible to map the surface of A on the 3d space defined by B, C and D but I would like to create a surface defined by the lower and upper limits of the variables - that is to say a rectangle with corners at (1,1,1), (2,3,2), (3,3,3) and (3,2,2) with a color map displayed on it corresponding to the values of A and a color key to the side of that. I have been able to wrap my head part way around persp and wireframe and can create a surface for A~B*(C/D) in either, but have not managed to create either the
3D surface plot
5 messages · David Winsemius, Eric Heupel, Duncan Murdoch
On Aug 16, 2011, at 9:50 PM, Eric Heupel wrote:
I have what is probably a noob question, but.... I am trying to create a 3d plot to illustrate the range of values for the following simple function: A = B*(C/D) B, C, and D are independent variables whose range are equal (e.g. 1 to 3 inclusive) I figure it's not possible to map the surface of A on the 3d space defined by B, C and D but I would like to create a surface defined by the lower and upper limits of the variables - that is to say a rectangle with corners at (1,1,1), (2,3,2), (3,3,3) and (3,2,2) with a color map displayed on it corresponding to the values of A and a color key to the side of that. I have been able to wrap my head part way around persp and wireframe and can create a surface for A~B*(C/D) in either, but have not managed to create either the
The rgl package will allow plotting in pseudo 3D space ... once you unwrap your head sufficiently to provide a suitable sample dataset. Persp and wireframe are designed for a function of two variables: A ~ B*C. You could also plot slices at various levels of D with those or perhaps more clearly with levelplot
David Winsemius, MD West Hartford, CT
Thanks for the prompt reply. Will dig into rgl ASAP. My sample data set is: B,C,D,A 1,1,1,1 1,1,2,0.5 2,1,1,2 1,2,1,2 1,1,3,0.333333333 3,1,1,3 1,3,1,3 2,1,2,1 1,2,2,1 2,2,1,4 2,1,3,0.666666667 3,1,2,1.5 1,2,3,0.666666667 1,3,2,1.5 3,2,1,6 2,3,1,6 2,2,2,2 3,1,3,1 1,3,3,1 3,3,1,9 2,2,3,1.333333333 3,2,2,3 2,3,2,3 3,2,3,2 2,3,3,2 3,3,2,4.5 3,3,3,3
On Aug 16, 2011, at 10:48 PM, David Winsemius wrote:
On Aug 16, 2011, at 9:50 PM, Eric Heupel wrote:
I have what is probably a noob question, but.... I am trying to create a 3d plot to illustrate the range of values for the following simple function: A = B*(C/D) B, C, and D are independent variables whose range are equal (e.g. 1 to 3 inclusive) I figure it's not possible to map the surface of A on the 3d space defined by B, C and D but I would like to create a surface defined by the lower and upper limits of the variables - that is to say a rectangle with corners at (1,1,1), (2,3,2), (3,3,3) and (3,2,2) with a color map displayed on it corresponding to the values of A and a color key to the side of that. I have been able to wrap my head part way around persp and wireframe and can create a surface for A~B*(C/D) in either, but have not managed to create either the
The rgl package will allow plotting in pseudo 3D space ... once you unwrap your head sufficiently to provide a suitable sample dataset. Persp and wireframe are designed for a function of two variables: A ~ B*C. You could also plot slices at various levels of D with those or perhaps more clearly with levelplot -- David Winsemius, MD West Hartford, CT
On Aug 16, 2011, at 11:07 PM, Eric Heupel wrote:
Thanks for the prompt reply. Will dig into rgl ASAP. My sample data set is: B,C,D,A 1,1,1,1 1,1,2,0.5 2,1,1,2 1,2,1,2 1,1,3,0.333333333 3,1,1,3 1,3,1,3 2,1,2,1 1,2,2,1 2,2,1,4 2,1,3,0.666666667 3,1,2,1.5 1,2,3,0.666666667 1,3,2,1.5 3,2,1,6 2,3,1,6 2,2,2,2 3,1,3,1 1,3,3,1 3,3,1,9 2,2,3,1.333333333 3,2,2,3 2,3,2,3 3,2,3,2 2,3,3,2 3,3,2,4.5 3,3,3,3
Here's a wireframe approach... which requires that we define a
variable that holds the ratio C/D, so this is a sort of projection.
Any case on the C/D value of 1 ( a plane in either 3 or 4 space I
believe) will be on the CoverD line = 1 on that plot. The equi-ratio
planes will fan out from the A=0, B=0 axis .... I think.
> dput(dat)
structure(list(B = c(1L, 1L, 2L, 1L, 1L, 3L, 1L, 2L, 1L, 2L,
2L, 3L, 1L, 1L, 3L, 2L, 2L, 3L, 1L, 3L, 2L, 3L, 2L, 3L, 2L, 3L,
3L), C = c(1L, 1L, 1L, 2L, 1L, 1L, 3L, 1L, 2L, 2L, 1L, 1L, 2L,
3L, 2L, 3L, 2L, 1L, 3L, 3L, 2L, 2L, 3L, 2L, 3L, 3L, 3L), D = c(1L,
2L, 1L, 1L, 3L, 1L, 1L, 2L, 2L, 1L, 3L, 2L, 3L, 2L, 1L, 1L, 2L,
3L, 3L, 1L, 3L, 2L, 2L, 3L, 3L, 2L, 3L), A = c(1, 0.5, 2, 2,
0.333333333, 3, 3, 1, 1, 4, 0.666666667, 1.5, 0.666666667, 1.5,
6, 6, 2, 1, 1, 9, 1.333333333, 3, 3, 2, 2, 4.5, 3), CoverD = c(1,
0.5, 1, 2, 0.333333333333333, 1, 3, 0.5, 1, 2, 0.333333333333333,
0.5, 0.666666666666667, 1.5, 2, 3, 1, 0.333333333333333, 1, 3,
0.666666666666667, 1, 1.5, 0.666666666666667, 1, 1.5, 1)), .Names =
c("B",
"C", "D", "A", "CoverD"), row.names = c(NA, -27L), class = "data.frame")
>
> require(rms)
> dat$CoverD <- with(dat, C/D)
> mod <- ols(A~ rcs(B,3)*rcs(CoverD), data=dat)
> ddd <- datadist(dat)
> options(datadist="ddd")
> ddd <- datadist(dat)
> bplot(Predict(mod, B, CoverD), lfun=wireframe)
On Aug 16, 2011, at 10:48 PM, David Winsemius wrote:
On Aug 16, 2011, at 9:50 PM, Eric Heupel wrote:
I have what is probably a noob question, but.... I am trying to create a 3d plot to illustrate the range of values for the following simple function: A = B*(C/D) B, C, and D are independent variables whose range are equal (e.g. 1 to 3 inclusive) I figure it's not possible to map the surface of A on the 3d space defined by B, C and D but I would like to create a surface defined by the lower and upper limits of the variables - that is to say a rectangle with corners at (1,1,1), (2,3,2), (3,3,3) and (3,2,2) with a color map displayed on it corresponding to the values of A and a color key to the side of that. I have been able to wrap my head part way around persp and wireframe and can create a surface for A~B*(C/D) in either, but have not managed to create either the
The rgl package will allow plotting in pseudo 3D space ... once you unwrap your head sufficiently to provide a suitable sample dataset. Persp and wireframe are designed for a function of two variables: A ~ B*C. You could also plot slices at various levels of D with those or perhaps more clearly with levelplot --
David Winsemius, MD West Hartford, CT
2 days later
On 11-08-16 9:50 PM, Eric Heupel wrote:
I have what is probably a noob question, but.... I am trying to create a 3d plot to illustrate the range of values for the following simple function: A = B*(C/D) B, C, and D are independent variables whose range are equal (e.g. 1 to 3 inclusive) I figure it's not possible to map the surface of A on the 3d space defined by B, C and D but I would like to create a surface defined by the lower and upper limits of the variables - that is to say a rectangle with corners at (1,1,1), (2,3,2), (3,3,3) and (3,2,2) with a color map displayed on it corresponding to the values of A and a color key to the side of that. I have been able to wrap my head part way around persp and wireframe and can create a surface for A~B*(C/D) in either, but have not managed to create either the
The contour3d function in misc3d might do what you want. See the examples. Duncan Murdoch