用R中的for循环绘制小的倍数

时间:2016-09-01 12:32:41

标签: r gis data-visualization facet maptools

我正在尝试绘制一张地图小的多重网格,显示自1900年以来与佛罗里达相交的飓风/热带风暴。我使用了一些空间查询来为这个项目分配所有大西洋风暴的数据库。

我现在在佛罗里达州的多边形,一些邻近的州,佛罗里达州的几个主要城市,当然还有奥基乔比湖的阴影线上绘制了我有限数量的飓风轨道的shapefile线。这是简单的代码:

library(maptools)
library(gdata)
library(RColorBrewer)

setwd("~/hurricanes")

# read shapefiles
florida <- readShapePoly("florida.shp")
south <- readShapePoly("south.shp")
hurricanes <- readShapeLines("hurricanes-florida.shp")

cities <- readShapePoints("cities.shp")
lakes <- readShapePoly("lakes.shp")

# miami, orlando and tallahassee (in FL)
cities <- subset(cities, ST == "FL")

# don't need ALL the 'canes
hurricanes1900 <- subset(hurricanes, Season >= 1900)

mycolors <- brewer.pal(5, "YlOrRd")

pdf(file = "hurricanemaps.pdf", ,width=8,height=20)
    par(mfrow=c(15,5), mar=c(1,1,1,1))
    for(i in 1:nrow(hurricanes1900)) 
        { 
        plot(south, col="#e6e6e6", border = "#999999")
        plot(florida, col="#999999", border = "#999999", add = TRUE)
        plot(lakes, col="#ffffff", border = "#999999", add = TRUE)
        plot(cities, pch=10, cex=.1,col="#000000", bg="#e38d2c", lwd=1, add = TRUE)
        plot(hurricanes1900[i,], col = mycolors[cut(hurricanes$MAX_Wind_W, breaks = 5)],
             lwd=3, add = TRUE); title(hurricanes1900$Title[i])
     }
dev.off()

我遇到的三个大问题:

1)循环给我一张每场风暴的地图。我希望代码每年在网格中生成佛罗里达/南方地图(即使在那些没有风暴的年份)和当年的所有风暴,最好是标签。

2)我想在所有风暴中设置风速的颜色,而不仅仅是循环的每个特定行中的颜色。那样强烈的风暴(如1992年的安德鲁)即使在他们是一年中唯一的风暴时也显得更加暗淡。也许我可以解决这个问题,我记录了一个可以相应设计风格的分类(H1,H2等)变量。

3)假设我能算出第1号,我在每个风暴路径上获取标签时遇到问题。 maptools文档不是很好。

无论如何,这是迄今为止的输出(标题是shapefile中两个字段的串联):

enter image description here

真正的问题是第1号。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

鉴于没有可重复的数据,我收集了一些数据用于此演示。请为下次SO用户提供最小的可重现数据。这将有助于您获得更多帮助。

您想要实现的目标可以通过ggplot2完成。如果您想每年绘制一张地图,可以使用def sum[A](a:A,b:A):A={a+b} //declare two arguments <console>:7: error: type mismatch; found : A required: String def sum[A](a:A,b:A):A={a+b} 。如果要根据风添加颜色,则可以在绘制路径时在facet_wrap()中执行此操作。如果你想增加飓风&#39;名称,您可以使用ggrepel包,它允许您轻松提供注释。请注意,如果要绘制平滑路径,则还需要进行数据处理。

aes()

enter image description here