[R-sig-Geo] Leader lines for inset map

Vladimir sendmeoffer at gmail.com
Fri Nov 7 17:13:01 CET 2014


Hello!

Well, I think this will work for me, thanks Rohan!

As others pointed out, R is not aimed for cartographic map design, 
though it can be used in some cases (when repetitive changes applied to 
the data drawn). For one-time maps I will export the map into SVG, and 
then do the design in the Inkscape.

Thanks again for your answers!

All the best,
Vladimir.


On 03/11/14 12:45, Rohan Sadler wrote:
> Hi Vladimir,
>
> Cheap and nasty says add lines, but first define where you want to put 
> your insets explicitly by specifying x,y for the subplots. modified 
> code below (you will want to move your xy values around slightly to suit).
>
>     library(TeachingDemos)
>     library(maptools)
>
>     data(wrld_simpl)
>
>     plot(wrld_simpl,border=NA,col='blue',axes=TRUE, xlim=c(100,130),
>     ylim=c(-40,30))
>
>   tmp <- subplot(
> plot(wrld_simpl,border=NA,col='green',bg='white',axes=FALSE),
>         y=c(-40,-25),x=c(75,110),inset=c(0.01,0.01))
>     tmp2 <- par('usr')
>
>     tmp3 <- subplot(
>     plot(wrld_simpl, border='red', axes=TRUE, xlim=c(95,105),
>     ylim=c(-5,5), bg='lightgrey'), y=c(-5,30),x=c(120,160))
>
>      par(xpd=TRUE)  # reset clipping region
>     rect( tmp3$usr[1], tmp3$usr[3], tmp3$usr[2], tmp3$usr[4],
>     border='orange' )
>
>   lines(c(tmp3$usr[1],120),c(tmp3$usr[4],30),lwd=2)
>   lines(c(tmp3$usr[2],120),c(tmp3$usr[3],-5),lwd=2)
>
>     op <- par(tmp[c('plt','usr')])
>     rect( tmp2[1], tmp2[3], tmp2[2], tmp2[4], border='red' )
>     par(op)
>
> I've added in a ggmap equivalent, which gives close to publication 
> quality graphic, pulling a map from googlemaps (you may want imagery 
> instead). All based on Kahle & Wickham's excellent paper. Note that 
> this example is fudged in that the inset is a zoom out rather than a 
> zoom in; and I could waste a lot of time getting rid of the second 
> 'accidental' legend. Go for something other than the googlemaps API if 
> you wish to publish something similar with ggmap. Depending on one's 
> level of abstraction, it still requires you to add lines ... :)
> (assuming I have understood your question right!!)
>
> Regards
> Rohan
>
> library(ggmap)
> # Source: http://journal.r-project.org/archive/2013-1/kahle-wickham.pdf
>
> # violent crimes in houston, texas
> violent_crimes <- subset(crime,
>  offense != "auto theft" & offense != "theft" & offense != "burglary")
>
>  # order violent crimes
>  violent_crimes$offense <- factor(violent_crimes$offense,
>  levels = c("robbery", "aggravated assault", "rape", "murder"))
>
>  # restrict to downtown
>  violent_crimes <- subset(violent_crimes,
>  -95.39681 <= lon & lon <= -95.34188 &
>  29.73631 <= lat & lat <= 29.78400)
>
> # arbitrary area of interst
> AOI<- data.frame(x=c(-95.38,-95.38,-95.385,-95.385,-95.38),
>        y=c(29.74,29.745,29.745,29.74,29.74))
> AOIConnectors<- data.frame(x=c(-95.38,-95.35836,-95.38,-95.35836),
> y=c(29.74,29.73631,29.745,29.75062),seg=rep(1:2,each=2))
>
> # googlemaps api
> houston <- get_map("houston", zoom = 14)
>
> # generate your graphics layers
> HoustonMap <- ggmap(houston, extent = "device", legend = "topleft")
>
> overlay <- stat_density2d(
> aes(x = lon, y = lat, fill = ..level.., alpha = ..level..),
> bins = 4, geom = "polygon",
> data = violent_crimes
> )
>
> # construct your image
> HoustonMap + overlay + inset(
> grob = ggplotGrob(ggplot() + overlay + theme_inset()),
> xmin = -95.35836, xmax = Inf, ymin = -Inf, ymax = 29.75062)+
> geom_line(aes(x,y,group=seg),data=AOIConnectors)+
> geom_path(aes(x,y),data=AOI)
>
>
>
>
>
> On 3 November 2014 18:22, Vladimir <sendmeoffer at gmail.com 
> <mailto:sendmeoffer at gmail.com>> wrote:
>
>     Hello!
>
>     The minimal example is
>     ===== (source
>     http://r-sig-geo.2731867.n2.nabble.com/making-an-inset-in-a-map-figure-tp7584585p7584618.html
>     )
>
>         |library(TeachingDemos)
>         library(maptools)
>         |
>
>         ||
>         |data(wrld_simpl)
>
>         plot(wrld_simpl,border=NA,col='blue',axes=TRUE, xlim=c(100,130),
>         ylim=c(-40,30))
>
>         tmp <- subplot(
>     plot(wrld_simpl,border=NA,col='green',bg='white',axes=FALSE),
>             'bottomleft', size=c(2,1), inset=c(0.01,0.01))
>
>         tmp2 <- par('usr')
>
>         tmp3 <- subplot(
>         plot(wrld_simpl, border='red', axes=TRUE, xlim=c(95,105),
>         ylim=c(-5,5), bg='lightgrey'), 'topright', size=c(2,2))
>
>         par(xpd=TRUE)  # reset clipping region
>         rect( tmp3$usr[1], tmp3$usr[3], tmp3$usr[2], tmp3$usr[4],
>         border='orange' )
>
>         op <- par(tmp[c('plt','usr')])
>         rect( tmp2[1], tmp2[3], tmp2[2], tmp2[4], border='red' )
>         par(op)
>         |
>
>     =====
>
>     I want to connect orange rectangle with topright inset map.
>
>     All the best,
>     Vladimir.
>
>
>     On 03/11/14 08:53, Barry Rowlingson wrote:
>     >
>     > I don't think you'll get a complete solution from this mailing list
>     > until you tell us how you are drawing your maps in the first place.
>     >
>     > Are you using base graphics plotting, or ggplot, or ggmap, or
>     lattice?
>     > Could you throw us a few lines of code that show how you make your
>     > base and insert maps? Otherwise you're going to get a bunch of "just
>     > draw lines" answers...
>     >
>     > On 1 Nov 2014 20:07, "Vladimir" <sendmeoffer at gmail.com
>     <mailto:sendmeoffer at gmail.com>
>     > <mailto:sendmeoffer at gmail.com <mailto:sendmeoffer at gmail.com>>> wrote:
>     >
>     >     Hello list!
>     >
>     >     I would like to add leader lines to my inset maps. These
>     lines connect
>     >     the frame of the inset map with the corresponding area on
>     the main
>     >     map.
>     >     Good examples are here [1], [2], or here [3].
>     >
>     >     What is the most convenient R approach to do so?
>     >
>     >     Kind regards,
>     >     Vladimir.
>     >
>     >     ---
>     >     [1]
>     >
>     http://gce-lter.marsci.uga.edu/public/images/gce_study_area_blowup_nov07_rev.jpg
>     >     [2] http://pubs.usgs.gov/fs/fs08203/images/study_area.gif
>     >     [3]
>     >
>     http://www.innovativegis.com/basis/supplements/bm_dec_02/Ironing_Colorado_files/image004.jpg
>     >
>     >     _______________________________________________
>     >     R-sig-Geo mailing list
>     > R-sig-Geo at r-project.org <mailto:R-sig-Geo at r-project.org>
>     <mailto:R-sig-Geo at r-project.org <mailto:R-sig-Geo at r-project.org>>
>     > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>     >
>
>
>             [[alternative HTML version deleted]]
>
>     _______________________________________________
>     R-sig-Geo mailing list
>     R-sig-Geo at r-project.org <mailto:R-sig-Geo at r-project.org>
>     https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>
>
>
> -- 
> Senior Scientist
> Astron Environmental Services Pty. Ltd.
> rohan.sadler at astron.com.au <mailto:rohan.sadler at astron.com.au>
>
> Adjunct Senior Lecturer
> School of Agricultural and Resource Economics, M089
> The University of Western Australia
>
> Office:  +61 8 94219684
> Mobile:      0433 192 600


	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list