geofacet: 按地理位置分面的数据可视化

浏览: 1524

CRAN刚上线的新包geofacet,可以让ggplot2分面按指定的地理位置来,比如下面的数据,美国各州各项指标的排名:

  head(state_ranks)
   state   name   variable rank1    AK Alaska  education   282    AK Alaska employment   503    AK Alaska     health   254    AK Alaska     wealth    55    AK Alaska      sleep   276    AK Alaska    insured   50

我们正常画图是这样子的:

ggplot(state_ranks, aes(variable, rank, fill = variable)) +
 geom_col() +
 coord_flip() +
 theme_bw() +
 facet_wrap(~ state)

image.png

这个geofacet包的引入了facet_geo,用法和facet_wrap一模一样,所以如果你会用facet_wrap分面的话,你已然会了:

ggplot(state_ranks, aes(variable, rank, fill = variable)) +
 geom_col() +
 coord_flip() +
 theme_bw() +
 facet_geo(~ state)

image.png

然后它还可以通过手工指定位置,比如下面这个:

head(us_state_grid2)
 row col code       name1   6   7   AL    Alabama2   1   1   AK     Alaska3   6   2   AZ    Arizona4   6   5   AR   Arkansas5   6   1   CA California6   5   3   CO   Colorado

可以通过grid参数指定,label参数可以指定分面用什么变量来label:

ggplot(state_unemp, aes(year, rate)) +
 geom_line() +
 facet_geo(~ state, grid = "us_state_grid2", label = "name") +
 scale_x_continuous(labels = function(x) paste0("'", substr(x, 3, 4))) +
 labs(title = "Seasonally Adjusted US Unemployment Rate 2000-2016",
   caption = "Data Source: bls.gov",
   x = "Year",
   y = "Unemployment Rate (%)") +
 theme(strip.text.x = element_text(size = 6))

image.png

geofacet包里自带了一些geo grid信息:

> get_grid_names()
[1] "us_state_grid1"       "us_state_grid2"       "eu_grid1"
[4] "aus_grid1"            "sa_prov_grid1"        "london_boroughs_grid"
[7] "nhs_scot_grid"        "india_grid1"          "india_grid2"[10] "argentina_grid1"      "br_grid1"

比如我们用欧盟国家的位置来画它们的GDP:

ggplot(eu_gdp, aes(year, gdp_pc)) +
 geom_line(color = "steelblue") +
 facet_geo(~ name, grid = "eu_grid1", scales = "free_y") +
 scale_x_continuous(labels = function(x) paste0("'", substr(x, 3, 4))) +
 ylab("GDP Per Capita in Relation to EU Index (100)") +
 theme_bw()

image.png

很可惜,没有中国各个省的位置信息,不过这个分分钟我们可以搞出来,我之前为了画中国地图,打包了个中国的地图信息(分省份,且有台湾)在chinamap包里,我们很容易通过这个data.frame生成一个各个省相对位置的grid表格来,大家可以试一下,或者等我什么时候有这个可视化的需求,我再来搞。

image.png

有grid信息之后,geofacet还支持通过拖拽来微调,这是用shiny写的:

grid_design()

比如我把美国地图拖成这样子:

image.png

然后拿它来可视化美国大选:

ggplot(election, aes(candidate, votes / 1000000, fill = candidate)) +
 geom_col() +
 scale_fill_manual(values = c("#4e79a7", "#e15759", "#59a14f")) +
 facet_geo(~ state, grid = mygrid) +
 coord_flip() +
 labs(title = "2016 Election Results",
   caption = "Data Source: http://bit.ly/2016votecount",
   x = NULL,
   y = "Votes (millions)") +
 theme(strip.text.x = element_text(size = 6))

image.png

推荐 0
本文由 EasyCharts 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册