我正在使用R / ggplot创建全球地图,并标注世界地震带。我正在使用这里的修改后的shapefile:http://gmo.gfz-potsdam.de/。
绘图中有9个图层和4400多个组。但是,其中一些图层应该有空洞,但实际上没有。因此,为了解决这个问题,我需要先渲染这些多边形,使它们出现在后面。在使用geom_polygon时,我如何更改多边形的渲染顺序?
这段代码生成了以下的图表。
如果你将上面的图表与原始数据(使用GIS软件绘制的)进行比较,你会发现以下问题:
- 原始图表中点(Long=77, Lat=42)周围的区域不存在。这是因为棕色多边形最后被渲染。
- 对于大绿色区域(经度Long=80,纬度Lat=38),它全部变成了黄色。这是因为黄色多边形在绿色多边形之后被渲染。
- 我不太关心缺失的洞,例如(经度Long=74,纬度Lat=39)附近的区域。
绘图中有9个图层和4400多个组。但是,其中一些图层应该有空洞,但实际上没有。因此,为了解决这个问题,我需要先渲染这些多边形,使它们出现在后面。在使用geom_polygon时,我如何更改多边形的渲染顺序?
require("rgdal") # requires sp, will use proj.4 if installed
require("maptools")
require("ggplot2")
gpclibPermit() # required for fortify method
require("plyr")
fill_colours <- c("#dddddd", "#8FC463FF", "#46A742FF", "#FFFC00FF", "#F2B212FF", "#E9726AFF", "#D92C50FF", "#FF1B23FF", "#B1681FFF")
eq.shp = readOGR(dsn=".", "PGA_PolygonsPY v2_region")
# Create a discrete scale, there are probably more efficient ways of doing this
eq.shp$MAXVALUE[eq.shp$MAXVALUE==10.0] = 9
eq.shp$MAXVALUE[eq.shp$MAXVALUE== 4.8] = 8
eq.shp$MAXVALUE[eq.shp$MAXVALUE== 4.0] = 7
eq.shp$MAXVALUE[eq.shp$MAXVALUE== 3.2] = 6
eq.shp$MAXVALUE[eq.shp$MAXVALUE== 2.4] = 5
eq.shp$MAXVALUE[eq.shp$MAXVALUE== 1.6] = 4
eq.shp$MAXVALUE[eq.shp$MAXVALUE== 0.8] = 3
eq.shp$MAXVALUE[eq.shp$MAXVALUE== 0.4] = 2
eq.shp$MAXVALUE[eq.shp$MAXVALUE== 0.2] = 1
eq.shp$MAXVALUE <- sprintf("%d", eq.shp$MAXVALUE)
eq.shp@data$id = rownames(eq.shp@data)
eq.points = fortify(eq.shp, region='id')
# Join the data frames back together
eq.df = join(eq.points, eq.shp@data, by='id')
p <- ggplot()
p <- p + geom_polygon(data = eq.df, aes(long, lat, group=group, fill=MAXVALUE))
p <- p + scale_fill_manual(values=fill_colours)
p <- p + coord_equal(ratio = 1, xlim=c(65, 85), ylim=c(35, 45))
p
这段代码生成了以下的图表。
![ggplot output](https://istack.dev59.com/TQydp.webp)
reorder
函数? - ROLO