 Fadi -4 years ago 227
R Question

# Setting color range in persp3d in R

I'm really new to R and I want to create an Image like the one I added here, but I need to have the Color Range from 0 to 1, right now it's set automatically, in the image it is from 0.2 to 0.6.
Here is my R code that I use:
Mat.csv is a 2D Matrix with values in [0,1]

``````library(plot3D)
mydata <- read.csv("D:/output/Mat.csv")
mydata <- as.matrix(mydata)
pdf("D:/output/surfaceplot.pdf")
mycols <- colorRampPalette( c("#ff0000", "#00ff00") )
persp3D(z = mydata, theta = 120, zlim=c(0,1))
dev.off()
``````

Example Graph cuttlefish44
Answer Source

Argument `clim` will solve your problem. (`persp3D` is a `plot3D` package's function, but `persp3d` is a `rgl` package's function. Be careful.) `colorRampPalette` returns `function` that interpolate a set of given colors to create new function's argument number of colors. So you can set persp3D's color vector by giving the output of new `function` that `colorRampPalette` returns. For example, `persp3D(..., col = mycols(256))` or, `mycolv <- mycols(256); persp3D(..., col = mycolv)`

``````library(plot3D)

## example data
x <- seq(-pi, pi, by = 0.1)
y <- seq(-pi, pi, by = 0.1)
mydata <- outer(x, y, function(x, y) cos(x) * sin(y))
range(mydata)   # about -1 ~ 1

## colour function
mycols <- colorRampPalette(c("blue", "red", "green", "yellow"))

## draw
persp3D(z = mydata, ticktype = "detailed", col = mycols(256))                  # left
persp3D(z = mydata, ticktype = "detailed", col = mycols(256), clim=c(-2, 2))   # right
`````` Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download
Latest added