Does plotKML handle skewed diverging continuous raster?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Does plotKML handle skewed diverging continuous raster?

DAlcaraz
Hi,
First of all, thank you very much for your great job with the plotKML package for R. It is simply GREAT!!!
However, I've been fighting during one week with this issue and I wonder whether the package still does not handle it.
How can a plot a kml from a raster whose values show deviations from 0, but follow an skewed distribution?
Ideally, I would like negative values in reds, positive values in blues, and zero values in grey.

Thank you very much in advance for your help.
Domingo

PS: I've pasted below a trivial example showing how the "plot" function can handle this issue but the plotKML does not.

install.packages("raster", dep=T)
install.packages("RColorBrewer", dep=T)
install.packages("plotKML", dep=T)
library(raster)
library(RColorBrewer)
library(plotKML)

r<- raster(ncol=5,nrow=2)
values(r) <- c(-5,-4,-1,0,0,3,-2,-6,-6,-6) #Positive and Negative changes
as.matrix(r)
hist(r, main="Diverging skewed distribution of raster data")

DivColorBreaks <- c(-6,-3,-0.1,0.1,3,6)#
NDivBreaks <- length(DivColorBreaks)-1
DivColPalette <- colorRampPalette((brewer.pal(NDivBreaks, "RdBu")), space="Lab")
DivCols <- DivColPalette(NDivBreaks)

plot(r, useRaster=FALSE,
     col=  DivCols, breaks=DivColorBreaks)
#In the plot graph:
#pixel r1,c3 = -1 is in reds. CORRECT
#pixels r1,c4&5 = 0 are in grey. CORRECT

kml_open("DivSkewd.kml")
kml_layer.Raster(r, plot.legend = TRUE, metadata = NULL,  
                 png.width = ncol(r), png.height = nrow(r),
                 min.png.width = 800,
                 colour_scale =  DivCols, #the problem must be here?
                 #Here I would need sth like "breaks=DivColorBreaks"
                 raster_name="DivSkewd.png")    
kml_close("DivSkewd.kml")
#In DivSkewd.png:
#pixel r1,c3 = -1 is in grey. INCORRECT
#pixels r1,c4&5 = 0 are in blue. INCORRECT

#How could I plot the raster so that it fairly displays
#which pixels have negative values in red and positive values in blue?
Reply | Threaded
Open this post in threaded view
|

Re: Does plotKML handle skewed diverging continuous raster?

Tomislav Hengl-4

You need to classify the data using the 'cut' function e.g.:

library(RColorBrewer)
library(plotKML)
data(eberg_grid)
gridded(eberg_grid) <- ~x+y
proj4string(eberg_grid) <- CRS("+init=epsg:31467")
eberg_grid$r <- eberg_grid$TWISRT6-mean(eberg_grid$TWISRT6)
DivColPalette <- colorRampPalette((brewer.pal(NDivBreaks, "RdBu")),
space="Lab")
DivColorBreaks <- c(min(eberg_grid$r),-1,-0.1,0.1,1,max(eberg_grid$r))
eberg_grid$rc <- cut(eberg_grid$r, breaks=DivColorBreaks,
include.lowest=TRUE)
summary(eberg_grid$rc)
plotKML(eberg_grid["rc"],
colour_scale=DivColPalette(length(levels(eberg_grid$rc))))

I've just discovered a small bug in my 'reproject.R' script that
re-orders the class names, so you will need to get plotKML Version:
0.4-6 from R-forge to get exactly what you look for:

install.packages("plotKML", repos=c("http://R-Forge.R-project.org"))

HTH,

T. Hengl

On 14-9-2014 11:36, DAlcaraz wrote:

> Hi,
> First of all, thank you very much for your great job with the plotKML
> package for R. It is simply GREAT!!!
> However, I've been fighting during one week with this issue and I wonder
> whether the package still does not handle it.
> How can a plot a kml from a raster whose values show deviations from 0, but
> follow an skewed distribution?
> Ideally, I would like negative values in reds, positive values in blues, and
> zero values in grey.
>
> Thank you very much in advance for your help.
> Domingo
>
> PS: I've pasted below a trivial example showing how the "plot" function can
> handle this issue but the plotKML does not.
>
> install.packages("raster", dep=T)
> install.packages("RColorBrewer", dep=T)
> install.packages("plotKML", dep=T)
> library(raster)
> library(RColorBrewer)
> library(plotKML)
>
> r<- raster(ncol=5,nrow=2)
> values(r) <- c(-5,-4,-1,0,0,3,-2,-6,-6,-6) #Positive and Negative changes
> as.matrix(r)
> hist(r, main="Diverging skewed distribution of raster data")
>
> DivColorBreaks <- c(-6,-3,-0.1,0.1,3,6)#
> NDivBreaks <- length(DivColorBreaks)-1
> DivColPalette <- colorRampPalette((brewer.pal(NDivBreaks, "RdBu")),
> space="Lab")
> DivCols <- DivColPalette(NDivBreaks)
>
> plot(r, useRaster=FALSE,
>       col=  DivCols, breaks=DivColorBreaks)
> #In the plot graph:
> #pixel r1,c3 = -1 is in reds. CORRECT
> #pixels r1,c4&5 = 0 are in grey. CORRECT
>
> kml_open("DivSkewd.kml")
> kml_layer.Raster(r, plot.legend = TRUE, metadata = NULL,
>                   png.width = ncol(r), png.height = nrow(r),
>                   min.png.width = 800,
>                   colour_scale =  DivCols, #the problem must be here?
>                   #Here I would need sth like "breaks=DivColorBreaks"
>                   raster_name="DivSkewd.png")
> kml_close("DivSkewd.kml")
> #In DivSkewd.png:
> #pixel r1,c3 = -1 is in grey. INCORRECT
> #pixels r1,c4&5 = 0 are in blue. INCORRECT
>
> #How could I plot the raster so that it fairly displays
> #which pixels have negative values in red and positive values in blue?
>
>
>
> --
> View this message in context: http://r-sig-geo.2731867.n2.nabble.com/Does-plotKML-handle-skewed-diverging-continuous-raster-tp7587124.html
> Sent from the R-sig-geo mailing list archive at Nabble.com.
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email]
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo