你如何创建一个50州的地图(而不是只有低于-48)

时间:2014-08-27 14:51:08

标签: r maps heatmap

你如何在R中制作50状态地图?

似乎人们创建的所有示例地图都只是较低的48

5 个答案:

答案 0 :(得分:15)

有很多方法可以做到这一点。就个人而言,我发现Google拥有最具吸引力的地图。我建议ggmapgoogleVis和/或RgoogleMaps

例如:

require(googleVis)

G4 <- gvisGeoChart(CityPopularity, locationvar='City', colorvar='Popularity',
                   options=list(region='US', height=350, 
                                displayMode='markers',
                                colorAxis="{values:[200,400,600,800],
                                 colors:[\'red', \'pink\', \'orange',\'green']}")
) 
plot(G4)

产生这个:

enter image description here

另一种比maps更具吸引力的方法是遵循this tutorial的方法,该方法显示如何将自定义地图从Inkscape(或等效地,Adobe Illustrator)导入到R中绘图。

你最终会得到这样的东西:

R and Inkscape

以下是使用choroplethrggplot2的方法:

library(choroplethr)
library(ggplot2)
library(devtools)
install_github('arilamstein/choroplethrZip@v1.3.0')
library(choroplethrZip)

data(df_zip_demographics)
df_zip_demographics$value = df_zip_demographics$percent_asian

zip_map = ZipChoropleth$new(df_zip_demographics)
zip_map$ggplot_polygon = geom_polygon(aes(fill = value),
                                      color = NA)
zip_map$set_zoom_zip(state_zoom = NULL,
                     county_zoom = NULL,
                     msa_zoom = NULL,
                     zip_zoom = NULL)
zip_map$title = "50 State Map for StackOverflow"
zip_map$legend = "Asians"
zip_map$set_num_colors(4)
choro = zip_map$render()
choro

data(df_pop_state)
outline = StateChoropleth$new(df_pop_state)
outline = outline$render_state_outline(tolower(state.name))

choro_with_outline = choro + outline
choro_with_outline

给你:

ggplot2

答案 1 :(得分:6)

This R-bloggers link可能对您有用。

为了让您了解一下,您可以使用

开始使用50状态地图
library(maps)
map("world", c("USA", "hawaii"), xlim = c(-180, -65), ylim = c(19, 72))

enter image description here

信不信由你,夏威夷就在那里。由于利润空间的缘故,它真的很小。

答案 2 :(得分:5)

恢复旧线程,因为它仍然没有接受的答案。

查看@ hrbrmstr的albersusa包:

cmd.Parameters.Add("?apellido", MySqlDbType.VarChar).Value = usuario.apellido;

产生

enter image description here

并且可以做更多的事情

devtools::install_github("hrbrmstr/albersusa")
library(albersusa)
plot(usa_composite(proj="laea"))

enter image description here

答案 3 :(得分:2)

您可能需要考虑在maptools包中使用state.vbm地图,这包括所有50个状态,并使较小的状态更加可见(适用于着色,或向每个州添加绘图,但网站之间的距离)不会是准确的。)

另一个选择是绘制连续的48个州,然后在开放区域自己添加阿拉斯加和夏威夷。这样做的一个选择是使用TeachingDemos包中的subplot函数。

以下是一些使用maptools包提供的几个shapefile的示例代码:

library(maptools)
library(TeachingDemos)

data(state.vbm)
plot(state.vbm)

yy <- readShapePoly(system.file("shapes/co37_d90.shp", package="maptools")[1])
zz <- readShapePoly(system.file("shapes/co51_d90.shp", package="maptools")[1])
xx <- readShapePoly(system.file("shapes/co45_d90.shp", package="maptools")[1])
plot(yy)
par('usr')

subplot( plot(zz), c(-84,-81), c(31,33) )
subplot( plot(xx), c(-81, -78), c(31,33) )

您只需要为状态找到合适的形状文件。

答案 4 :(得分:2)

使用choroplethr,您可以通过执行以下操作来创建简单快速的状态地图

#install.packages("choroplethr")
#install.packages("choroplethrMaps")

library(choroplethr)
library(choroplethrMaps)
data(df_pop_state)
StateChoropleth$new(df_pop_state)$render()

我喜欢这种方法,因为它快速而简单。如果您不想要州标签,删除它们需要更多一点:

c = StateChoropleth$new(df_pop_state)
c$title = "2012 State Population Estimates"
c$legend = "Population"
c$set_num_colors(7)
c$set_zoom(NULL)
c$show_labels = FALSE
without_abbr = c$render()

without_abbr

以下是两种方法的比较: enter image description here

来源12