Kristi Glover
2019-Apr-11 15:32 UTC
[R] How to overlay a vector map (polygon) on raster maps?
Dear Ben,
Thank you very much for the message. I run it and it produced three separate
images with X and y Axis and a legend for each image. I was thinking to plot
all of these three images with a single legend and only X axis value at the
bottom's image and y values for each image.
I added the following code on your code
grid.arrange(PP[[1]],PP[[2]],PP[[3]])
But, as I mentioned above, I can get three separate images with its own legend
and X and Y axix
Thanks,
________________________________
From: Ben Tupper <btupper at bigelow.org>
Sent: April 11, 2019 7:13 AM
To: Kristi Glover
Cc: r-help at r-project.org
Subject: Re: [R] How to overlay a vector map (polygon) on raster maps?
Hi,
I think you want to build a levelplot object with polygon overlaid for each
layer. Like the link below shows but with the added layer per your example.
https://oscarperpinan.github.io/rastervis/FAQ.html#several_rasters
Also, you will get bucket loads of spatial-centric help using the r-sig-geo
mailing list; check it out here https://stat.ethz.ch/mailman/listinfo/r-sig-geo.
Cheers,
Ben
### START
library(sp)
library(raster)
library(rasterVis)
library(RColorBrewer)
S <- raster::stack(system.file("external/rlogo.grd",
package="raster"))
# make a polygon by shrinking the extent and casting object type
Poly <- as(raster::extent(S) + c(15, -32, 25, -10),
"SpatialPolygons")
# build the layers in a list, adding the polygon to each layer
themes <- c("Reds", "Greens", "Blues")
PP <- lapply(seq_len(nlayers(S)),
function(i) {
levelplot(S[[i]],
par.settings = rasterVis::rasterTheme(region =
RColorBrewer::brewer.pal(9, themes[i])),
margin=FALSE) +
layer(sp.polygons(Poly, col = "orange", lwd = 2))
}
)
# print each layer, but specify the location within a layout scheme
print(PP[[1]], split=c(1, 1, 1, 3), more = TRUE)
print(PP[[2]], split=c(1, 2, 1, 3), more = TRUE)
print(PP[[3]], split=c(1, 3, 1, 3), more = FALSE)
### END
> On Apr 11, 2019, at 7:28 AM, Kristi Glover <kristi.glover at
hotmail.com> wrote:
>
> He R users,
> I have been struggling to plot a boundary map over the raster maps. I tried
using the following example, but the boundary map could not be displayed over
the three raster maps.
> It works if we plot for a single raster. However when I want to plot the
three maps using "levelplot" and add the boundary map it did not work.
I wanted to plot three raster same time because the "levelplot" so
that we can compare the maps as they have only one legend.
>
> My example code is given below, do you have any suggestions?
>
>
> library(gridExtra)
>
> library(raster)
>
> library(sp)
>
> library(rasterVis)
>
> library(rgdal)
>
> library(maptools)
>
>
> boundary<- readShapeSpatial("boundrymap.shp")
>
>
> minTemp<-raster("minTemp.tif")
>
> maxTemp<-raster("maxTemp.tif")
>
> averageTemp<-raster("averageTemp.tif")
>
> Temp<-stack(minTemp,maxTemp,averageTemp)
>
>
> levelplot(Temp, layout=c(1,3))+ layer(sp.polygons(boundary, col =
"yellow"))
>
> thanks
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org
Ecological Forecasting: https://eco.bigelow.org/
[[alternative HTML version deleted]]
Ben Tupper
2019-Apr-11 15:43 UTC
[R] How to overlay a vector map (polygon) on raster maps?
Hi, That's great topic to search on RSeek.org <http://rseek.org/> https://rseek.org/?q=plot+multiple+rasters+with+one+legend <https://rseek.org/?q=plot+multiple+rasters+with+one+legend> or to pose a question about on r-sig-geo Cheers, Ben> On Apr 11, 2019, at 11:32 AM, Kristi Glover <kristi.glover at hotmail.com> wrote: > > Dear Ben, > Thank you very much for the message. I run it and it produced three separate images with X and y Axis and a legend for each image. I was thinking to plot all of these three images with a single legend and only X axis value at the bottom's image and y values for each image. > > I added the following code on your code > grid.arrange(PP[[1]],PP[[2]],PP[[3]]) > > But, as I mentioned above, I can get three separate images with its own legend and X and Y axix > Thanks, > > From: Ben Tupper <btupper at bigelow.org> > Sent: April 11, 2019 7:13 AM > To: Kristi Glover > Cc: r-help at r-project.org > Subject: Re: [R] How to overlay a vector map (polygon) on raster maps? > > Hi, > > I think you want to build a levelplot object with polygon overlaid for each layer. Like the link below shows but with the added layer per your example. > > https://oscarperpinan.github.io/rastervis/FAQ.html#several_rasters <https://oscarperpinan.github.io/rastervis/FAQ.html#several_rasters> > > Also, you will get bucket loads of spatial-centric help using the r-sig-geo mailing list; check it out herehttps://stat.ethz.ch/mailman/listinfo/r-sig-geo <https://stat.ethz.ch/mailman/listinfo/r-sig-geo>. > > Cheers, > Ben > > ### START > library(sp) > library(raster) > library(rasterVis) > library(RColorBrewer) > > S <- raster::stack(system.file("external/rlogo.grd", package="raster")) > > # make a polygon by shrinking the extent and casting object type > Poly <- as(raster::extent(S) + c(15, -32, 25, -10), "SpatialPolygons") > > # build the layers in a list, adding the polygon to each layer > themes <- c("Reds", "Greens", "Blues") > PP <- lapply(seq_len(nlayers(S)), > function(i) { > levelplot(S[[i]], > par.settings = rasterVis::rasterTheme(region = RColorBrewer::brewer.pal(9, themes[i])), > margin=FALSE) + > layer(sp.polygons(Poly, col = "orange", lwd = 2)) > } > ) > > # print each layer, but specify the location within a layout scheme > print(PP[[1]], split=c(1, 1, 1, 3), more = TRUE) > print(PP[[2]], split=c(1, 2, 1, 3), more = TRUE) > print(PP[[3]], split=c(1, 3, 1, 3), more = FALSE) > ### END > > > > > On Apr 11, 2019, at 7:28 AM, Kristi Glover <kristi.glover at hotmail.com> wrote: > > > > He R users, > > I have been struggling to plot a boundary map over the raster maps. I tried using the following example, but the boundary map could not be displayed over the three raster maps. > > It works if we plot for a single raster. However when I want to plot the three maps using "levelplot" and add the boundary map it did not work. I wanted to plot three raster same time because the "levelplot" so that we can compare the maps as they have only one legend. > > > > My example code is given below, do you have any suggestions? > > > > > > library(gridExtra) > > > > library(raster) > > > > library(sp) > > > > library(rasterVis) > > > > library(rgdal) > > > > library(maptools) > > > > > > boundary<- readShapeSpatial("boundrymap.shp") > > > > > > minTemp<-raster("minTemp.tif") > > > > maxTemp<-raster("maxTemp.tif") > > > > averageTemp<-raster("averageTemp.tif") > > > > Temp<-stack(minTemp,maxTemp,averageTemp) > > > > > > levelplot(Temp, layout=c(1,3))+ layer(sp.polygons(boundary, col = "yellow")) > > > > thanks > > > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help> > > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html> > > and provide commented, minimal, self-contained, reproducible code. > > Ben Tupper > Bigelow Laboratory for Ocean Sciences > 60 Bigelow Drive, P.O. Box 380 > East Boothbay, Maine 04544 > http://www.bigelow.org <http://www.bigelow.org/> > > Ecological Forecasting: https://eco.bigelow.org/ <https://eco.bigelow.org/>Ben Tupper Bigelow Laboratory for Ocean Sciences 60 Bigelow Drive, P.O. Box 380 East Boothbay, Maine 04544 http://www.bigelow.org Ecological Forecasting: https://eco.bigelow.org/ [[alternative HTML version deleted]]
Ben Tupper
2019-Apr-11 16:15 UTC
[R] How to overlay a vector map (polygon) on raster maps?
Hi,
It's best to keep all of the replies on the list - you will get better
answers and leave a trail for others with similar questions to follow. If you
need more help, I strongly suggest that you start a fresh question on r-sig-geo.
I suppose you could try the panel argument to levelplot(). Using the panel
argument will modify each raster - that is each rendering of elements of your
raster stack - by performing what ever task you put in the panel function.
It's all a bit mysterious to me how it really works which is why I often
gravitate toward the more obvious-to-me layering that the latticeExtra package
provides with `levelplot(something) + layer(more stuff)`.
library(rasterVis)
library(sp)
set.seed(10)
x = runif(2000000, -0.0005, .9875)
y = runif(2000000, -0.0008, .99)
xmat = matrix(x, nrow = 500)
ymat = matrix(x, nrow = 500)
xras = raster(xmat)
yras = raster(ymat)
min_ = min(minValue(xras), minValue(yras))
max_ = max(maxValue(xras), maxValue(yras))
r.range = c(min_, max_)
Poly <- as(raster::extent(xras) + c(.15, -.32, .25, -.10),
"SpatialPolygons")
levelplot(stack(xras, yras),
col.regions = rev(rainbow(99, start=0, end=1)),
colorkey = list(space = "bottom"),
panel = function(...){
panel.levelplot(...)
sp.polygons(Poly, col = 'black', lwd = 3)
}
)
Cheers,
Ben
> On Apr 11, 2019, at 11:50 AM, Kristi Glover <kristi.glover at
hotmail.com> wrote:
>
> Thank you Ben for the link. It has lots of the information. One of the
example bellow, here how can we overlay a polygon (let's say river map) on
the two raster images? The two raster images are of Maximum and Minimum
temperature of a specific area.
> library(rasterVis)
>
> set.seed
> (10)
>
> x
> = runif(2000000, -0.0005, .9875)
>
> y
> = runif(2000000, -0.0008, .99)
>
> xmat
> = matrix(x, nrow = 500)
>
> ymat
> = matrix(x, nrow = 500)
>
> xras
> = raster(xmat)
>
> yras
> = raster(ymat)
>
> min_
> = min(minValue(xras), minValue(yras))
>
> max_
> = max(maxValue(xras), maxValue(yras))
>
> r.range
> = c(min_, max_)
>
>
> levelplot
> (stack(xras, yras), col.regions = rev(rainbow(99, start=0, end=1)),
colorkey = list(space = "bottom"))
> thank you so much for your help.
>
>
>
> From: Ben Tupper <btupper at bigelow.org>
> Sent: April 11, 2019 9:43 AM
> To: Kristi Glover
> Cc: r-help at r-project.org
> Subject: Re: [R] How to overlay a vector map (polygon) on raster maps?
>
> Hi,
>
> That's great topic to search on RSeek.org
>
> https://rseek.org/?q=plot+multiple+rasters+with+one+legend
>
> or to pose a question about on r-sig-geo
>
> Cheers,
> Ben
>
>> On Apr 11, 2019, at 11:32 AM, Kristi Glover <kristi.glover at
hotmail.com> wrote:
>>
>> Dear Ben,
>> Thank you very much for the message. I run it and it produced three
separate images with X and y Axis and a legend for each image. I was thinking
to plot all of these three images with a single legend and only X axis value at
the bottom's image and y values for each image.
>>
>> I added the following code on your code
>> grid.arrange(PP[[1]],PP[[2]],PP[[3]])
>>
>> But, as I mentioned above, I can get three separate images with its own
legend and X and Y axix
>> Thanks,
>>
>> From: Ben Tupper <btupper at bigelow.org>
>> Sent: April 11, 2019 7:13 AM
>> To: Kristi Glover
>> Cc: r-help at r-project.org
>> Subject: Re: [R] How to overlay a vector map (polygon) on raster maps?
>>
>> Hi,
>>
>> I think you want to build a levelplot object with polygon overlaid for
each layer. Like the link below shows but with the added layer per your
example.
>>
>> https://oscarperpinan.github.io/rastervis/FAQ.html#several_rasters
>>
>> Also, you will get bucket loads of spatial-centric help using the
r-sig-geo mailing list; check it out
herehttps://stat.ethz.ch/mailman/listinfo/r-sig-geo.
>>
>> Cheers,
>> Ben
>>
>> ### START
>> library(sp)
>> library(raster)
>> library(rasterVis)
>> library(RColorBrewer)
>>
>> S <- raster::stack(system.file("external/rlogo.grd",
package="raster"))
>>
>> # make a polygon by shrinking the extent and casting object type
>> Poly <- as(raster::extent(S) + c(15, -32, 25, -10),
"SpatialPolygons")
>>
>> # build the layers in a list, adding the polygon to each layer
>> themes <- c("Reds", "Greens", "Blues")
>> PP <- lapply(seq_len(nlayers(S)),
>> function(i) {
>> levelplot(S[[i]],
>> par.settings = rasterVis::rasterTheme(region =
RColorBrewer::brewer.pal(9, themes[i])),
>> margin=FALSE) +
>> layer(sp.polygons(Poly, col = "orange", lwd =
2))
>> }
>> )
>>
>> # print each layer, but specify the location within a layout scheme
>> print(PP[[1]], split=c(1, 1, 1, 3), more = TRUE)
>> print(PP[[2]], split=c(1, 2, 1, 3), more = TRUE)
>> print(PP[[3]], split=c(1, 3, 1, 3), more = FALSE)
>> ### END
>>
>>
>>
>> > On Apr 11, 2019, at 7:28 AM, Kristi Glover <kristi.glover at
hotmail.com> wrote:
>> >
>> > He R users,
>> > I have been struggling to plot a boundary map over the raster
maps. I tried using the following example, but the boundary map could not be
displayed over the three raster maps.
>> > It works if we plot for a single raster. However when I want to
plot the three maps using "levelplot" and add the boundary map it did
not work. I wanted to plot three raster same time because the
"levelplot" so that we can compare the maps as they have only one
legend.
>> >
>> > My example code is given below, do you have any suggestions?
>> >
>> >
>> > library(gridExtra)
>> >
>> > library(raster)
>> >
>> > library(sp)
>> >
>> > library(rasterVis)
>> >
>> > library(rgdal)
>> >
>> > library(maptools)
>> >
>> >
>> > boundary<- readShapeSpatial("boundrymap.shp")
>> >
>> >
>> > minTemp<-raster("minTemp.tif")
>> >
>> > maxTemp<-raster("maxTemp.tif")
>> >
>> > averageTemp<-raster("averageTemp.tif")
>> >
>> > Temp<-stack(minTemp,maxTemp,averageTemp)
>> >
>> >
>> > levelplot(Temp, layout=c(1,3))+ layer(sp.polygons(boundary, col =
"yellow"))
>> >
>> > thanks
>> >
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > R-help at 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.
>>
>> Ben Tupper
>> Bigelow Laboratory for Ocean Sciences
>> 60 Bigelow Drive, P.O. Box 380
>> East Boothbay, Maine 04544
>> http://www.bigelow.org
>>
>> Ecological Forecasting: https://eco.bigelow.org/
>
> Ben Tupper
> Bigelow Laboratory for Ocean Sciences
> 60 Bigelow Drive, P.O. Box 380
> East Boothbay, Maine 04544
> http://www.bigelow.org
>
> Ecological Forecasting: https://eco.bigelow.org/
Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org
Ecological Forecasting: https://eco.bigelow.org/