[R-sig-Geo] rasterVis levelplot: Use colortable in raster with attribute table
Gregor Ratzmann
tvh110 at alumni.ku.dk
Fri Feb 14 13:25:21 CET 2014
Here are all versions of packages which are loaded during the session:
[1] rgdal_0.8-16 rasterVis_0.27 hexbin_1.26.3 latticeExtra_0.6-26 RColorBrewer_1.0-5
[6] lattice_0.20-23 raster_2.2-12 sp_1.0-14
Think should be the latest?
I looked a little bit into that error which is returned by ratify() and as.factor() when I used my rasters ( Error in 1:ncol(r) : argument of length 0) and found this: https://stat.ethz.ch/pipermail/r-help/2013-December/364489.html
Maybe it has something to do with that error? I tried to do the plotting using spplot, and there it works perfectly...
Greg
________________________________________
Von: oscar.perpinan at gmail.com [oscar.perpinan at gmail.com]" im Auftrag von "Oscar Perpiñan [oscar.perpinan at upm.es]
Gesendet: Freitag, 14. Februar 2014 13:10
An: Gregor Ratzmann
Cc: r-sig-geo at r-project.org
Betreff: Re: [R-sig-Geo] rasterVis levelplot: Use colortable in raster with attribute table
I can't reproduce your error. What version of raster are you using?
Oscar.
-----------------------------------------------------------------
Oscar Perpiñán Lamigueiro
Dpto. Ingeniería Eléctrica (ETSIDI-UPM)
Grupo de Sistemas Fotovoltaicos (IES-UPM)
URL: http://oscarperpinan.github.io
Twitter: @oscarperpinan
2014-02-12 8:52 GMT+01:00 Gregor Ratzmann <tvh110 at alumni.ku.dk>:
> Thanks for your reply, Oscar,
>
> I'm sorry if the code appears somewhat confusing so I try to explain what it is supposed to do.
>
> So if I use the example from the ratify function help:
>
> r <- raster(nrow=10, ncol=10)
> r[] = 1
> r[51:100] = 2
> r[3:6, 1:5] = 3
> r <- ratify(r)
>
> rat <- levels(r)[[1]]
> rat$landcover <- c('Pine', 'Oak', 'Meadow')
> rat$code <- c(12,25,30)
> levels(r) <- rat
>
> cols=c("red","green","blue")
>
> levelplot(r,col.regions=cols)
>
>
> everything works fine as expected.
>
> So I will try to explain what my code is supposed to do. I have a thematic raster with attribute table. The raster takes on values between 1 and 28 each value representing one class. The value and corresponding class name are stored in the attribute tables column 5 and 4, respectively.
>
> #First I load the raster with the attribute table and color table
>
> r<-raster(##some raster with attribute and colortable##))
>
> #then I create a data frame from the levels of the thematic raster
>
> ratdf<-as.data.frame(levels(r))
>
>
> #now I extract column 5 of the RAT df which holds the IDs
>
> rat<-as.data.frame(ratdf[[5]])
>
> #Next step: create a vector with the classnames from RAT df col 4
>
> nvec<-as.character(ratdf[[4]])
>
> #then join the class names vector with the ID data frame
>
> rat$classes<-nvec
>
> #assign the column names of rat
> names(rat)<-c("ID","classes")
>
> #create an empty raster r1 from the r template
>
> r1<-raster(r)
>
> #assign the values of r to r1
>
> r1[]<-r[]
>
> #make a thematic raster of r1
>
> r1<-ratify(r1)
>
> #assign the levels to r1 from rat
>
> levels(r1)<-rat
>
>
> #next steps are to create a color ramp with only the valid colors (since the original raster is 8 bit it could contain up to 256 #colors but I only need colors 2 to 29) and plot the thing
>
> cols<-r at legend@colortable
> cols<-cols[2:29]
>
> levelplot(r1,col.regions=cols)
>
> ####
>
>
> What puzzles me is that after I created the new thematic raster with ratify, and I call the raster, it is displayed but under attributes appears the error: Error in 1:ncol(r) : argument of length 0. Maybe this has something to do with the problems plotting that raster. Btw, the same error appears as well when I use as.factor instead of ratify...
>
> Cheers
>
> greg
>
> ________________________________________
> Von: oscar.perpinan at gmail.com [oscar.perpinan at gmail.com]" im Auftrag von "Oscar Perpiñan [oscar.perpinan at upm.es]
> Gesendet: Freitag, 7. Februar 2014 19:40
> An: Gregor Ratzmann
> Cc: r-sig-geo at r-project.org
> Betreff: Re: [R-sig-Geo] rasterVis levelplot: Use colortable in raster with attribute table
>
> Hello,
>
>> I am trying to plot a raster which comes with an attribute table and a colortable using the rasterVis levelplot function.
>>
>> Here is my first question: is it possible to address the colortable slot directly in the levelplot function (as is possible for the plot3D through the useLegend argument)?
>
> Not yet. It is still in my To-do list.
>
>> Since I did not find a way to do it, I tried the below. Note that the original attribute table is not arranged as is neccessary for levelplot to read it so I first create a new raster and assign to it the attributes which are needed:
>> I know the procedure is improvable but for now I think it should do. The problem: Everything is plotted fine as expected, except that the last two classes of the raster are assigned the same color. Since there are the same number of classes as number of colors I do not really understand why this happens and, strange enough, in the color key all colors are plotted fine with the correct labels....additionally, when i do it using the plot() function it is working fine. When I used a different color ramp for levelplot it worked out for all classes and everything was well differentiated... Is there maybe some hex color code which levelplot can't read? Please appologize if I didn't express clearly what I want but I am still at the beginning of using R.
>
> I don't understand what you are trying to do with your code. Could you
> provide a reproducible example? Try the examples of the ratify help
> page.
>
> Best,
>
> Oscar.
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
More information about the R-sig-Geo
mailing list