SpatialPolygonsDataFrame doesn't plot properly when I make the color transparent

烈酒焚心 提交于 2020-01-02 10:16:15

问题


I've been struggling with this problem for a few days. I have a shapefile that contains zip code polygons. I'm trying to plot a certain portion of it with a transparent color (alpha=0.7), but some of the polygons at the edge of the plot end up with no color. If alpha=1.0, all polygons are fine. The shapefile is stored as a Large SpatialPolygonsDataFrame.

# Code that you can use (Thanks jbaums)

library(rgdal);
download.file('http://www.naturalearthdata.com/http//www.naturalearthdata.com/do‌​wnload/110m/cultural/ne_110m_admin_0_countries.zip', {f <- tempfile()}); 
unzip(f, exdir=tempdir()); 
shp <- readOGR(tempdir(), 'ne_110m_admin_0_countries'); 
plot(shp, col='#FF000070', xlim=c(-100, 25))

For reference, my code looks like this :

#~~~ Read zip shapefile
  in_zip.shp  = "./Data/USZIP11_wSTCntyLLFIPS.shp"
  zip_poly = readShapePoly(in_zip.shp)

#~~~ Set-up the mapping parameters
  xlim = c(-82.0, -80.7)
  ylim = c(25.5, 26.8)

#~~~ Works well
  output_figure <- "./Good.png"
  png(output_figure, width=5, height=4, units="in", res=1200)
  par(mar=c(1.5, 1.8, 2.0, 0.7))
  plot(xlim, ylim, type="n", xlim=xlim, ylim=ylim, axes=FALSE, xlab="", ylab="")

  plot(zip_poly, col=rgb(1, 0, 0, alpha=1), xlim=xlim, ylim=ylim, lty=1.3, add=T)
  box()
  title(main="Good")
  dev.off()

#~~~ Doesn't work well
  output_figure <- "./Bad.png"
  png(output_figure, width=5, height=4, units="in", res=1200)
  par(mar=c(1.5, 1.8, 2.0, 0.7))
  plot(xlim, ylim, type="n", xlim=xlim, ylim=ylim, axes=FALSE, xlab="", ylab="")

  plot(zip_poly,col=rgb(1,0,0,alpha=0.7),xlim=xlim,ylim=ylim,lty=1.3,add=T)
  box()
  title(main="Bad")
  dev.off()

Any tips would be appreciated. I attached figures so you can see what problem I get with my code. Thanks!


回答1:


First, I don't know the reason of the problem. The fact that it works for regular colours but not for colours with alpha channel, seems strange to me.

Second, here is an example of a work-around using gIntersection of the rgeos package to clip the polygons to the size of interest, i.e. the xlim and ylim. Plotting the clipped map seems to work for alpha colours.

library(rgdal)
library(rgeos)  # for gIntersection
library(raster) # for extent()

# download world map
download.file('http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip', {f <- tempfile()}); 
unzip(f, exdir=tempdir()); 
shp <- readOGR(tempdir(), 'ne_110m_admin_0_countries'); 

# define map limits
xlim = c(0, 90)
ylim = c(40, 60)

# red with alpha
mycol = rgb(1,0,0,0.5)

# plot world map
plot(shp)

# create rectangle from xlim and ylim
CP <- as(extent(c(xlim,ylim)), "SpatialPolygons")
proj4string(CP) <- proj4string(shp)

# add to plot
plot(CP, add=T, col=rgb(1,0,0,0.5))

# set up window for 2 plots, comparing 2 methods
par(mfrow=c(2,1))

# plot map with xlim and ylim: does not work the way we want
plot(shp, xlim=xlim, ylim=ylim, col=mycol, axes=T, las=1)

# clip map to xlim and ylim, then plot: works
out <- gIntersection(shp, CP, byid=TRUE)
plot(out, col=mycol, axes=T, las=1)


来源:https://stackoverflow.com/questions/24026108/spatialpolygonsdataframe-doesnt-plot-properly-when-i-make-the-color-transparent

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!