> On 11 Apr 2017, at 20:55, dncdd <dn...@aliyun.com <mailto:dn...@aliyun.com>> > wrote: > > Thank you Ismail SEZEN. > The link you give is filled.contour code which only works with my first mini > data .
filled.contour + lattice::levelplot solution can handle either matrix or a 3 column (x,y,z) data.frame by using the formula z ~ x + y. > > The code in the link for R 3.3.2 is : > ****** code ***** in **** link **** for R 3.3.2 **** > panel.filledcontour <- function(x, y, z, subscripts, at, col.regions = > cm.colors, > col = col.regions(length(at) - 1), ...) > { > stopifnot(require("gridBase")) > z <- matrix(z[subscripts], > nrow = length(unique(x[subscripts])), > ncol = length(unique(y[subscripts]))) > if (!is.double(z)) storage.mode(z) <- "double" > opar <- par(no.readonly = TRUE) > on.exit(par(opar)) > if (panel.number() > 1) par(new = TRUE) > par(fig = gridFIG(), omi = c(0, 0, 0, 0), mai = c(0, 0, 0, 0)) > cpl <- current.panel.limits() > plot.window(xlim = cpl$xlim, ylim = cpl$ylim, > log = "", xaxs = "i", yaxs = "i") > # paint the color contour regions > .filled.contour(as.double(do.breaks(cpl$xlim, nrow(z) - 1)), > as.double(do.breaks(cpl$ylim, ncol(z) - 1)), > z, levels = as.double(at), col = col) > # add contour lines > contour(as.double(do.breaks(cpl$xlim, nrow(z) - 1)), > as.double(do.breaks(cpl$ylim, ncol(z) - 1)), > z, levels = as.double(at), add=T, > col = "gray", # color of the lines > drawlabels=F # add labels or not > ) > } > plot.new() > > print(levelplot(volcano, panel = panel.filledcontour, > col.regions = terrain.colors, > cuts = 10, > plot.args = list(newpage = FALSE))) > *** END *** code *** in *** link *** for R 3.3.2 *** > > first mini data > which should be a three dimensinal data either and the data in matrix is not > a function of rdn and tdn > which means z matrix is not function of x,y. Here we are not interested in z is function of x and y but at the and, if you want to plot a 3D data on a flat surface, you need x and y for each z in the 3D space. > > 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) > > And the matrix looks like(3*9 = 27 data elements): > > 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 As I mentioned above, you have z values for each x and y values in the space. one of elements of z might be NA/NaN but at last you have. > > > Well, now I realized that the second data might (my current problem) be afour > dimensional data: > > 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) Thing are changed now. We are living in a 4D space (at least that we can sense) and there are only 2 ways to visualize 4D data on a flat surface. These are your only chance. 1- 3D perspective plotting (one of rgl, misc3d, scatterplot3d). Plot 'points' in the 3D space and set 4th dimension as color for each point. Does it make sense? I don’t know, it’s up to you. 2- for the (x,y,z,v) dimensions, plot contours of (x,y,v) for each z. I mean, assume z is height, slice it and plot each slice by filled.contour/levelplot or what ever you want. > > And (3*3*9 = 81 data elements): > > 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 ------three matrix---------------- > > 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 > > The three matrix is not the function of r1dn, r2dn, tdn. r1dn, r2dn, tdn can > be labels. So there are four dimensional data. x is r1dn, y is r2dn, z is tdn > and the three matrix is, let's say, vdn. > Four dimension: r1dn r2dn tdn fdn as x,y,z,v. And v is not the function of > x,y,z. So there are might need a 3d filled.contour. But I did not find it. > All the code I found is that x,y,z and z is a function of x,y. Another > situation I found is that x,y,z,v and v is function of x,y,z. But in my data, > v is not a function of x,y,z. Actually, you need to detail (in your mind and to us) what do you mean by being function of. A point can be represented by 4 points in 4D space (x,y,z,t). According to this; v is short for value (measurement); v(x,y,z,t) can represent a value in space and time. So this is a 5D data I assume. We mostly use one or 2 or 3 of this dimensions. So, v is function of (x, y, z, t) and change by (x, y, z, t). For instance, if v is not function of time (t), it is always constant and does not change in time. Hence, I dont need 4th dimension (t here) and I don’t need to plot v in a 4D space. This is what I know about being function of. [[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.