专栏名称: EasyCharts
EasyCharts,易图表,我们将定期推送各种数据可视化与分析教程,包括Excel(Power BI)、Origin、Sigmaplot、GraphPad、R、Python、Matlab、Tableau、D3.js等。
目录
相关文章推荐
奇舞精选  ·  从 DeepSeek 看25年前端的一个小趋势 ·  昨天  
奇舞精选  ·  从 DeepSeek 看25年前端的一个小趋势 ·  昨天  
前端早读课  ·  【第3451期】前端 TypeError ... ·  3 天前  
51好读  ›  专栏  ›  EasyCharts

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

EasyCharts  · 公众号  · 前端  · 2017-08-04 07:00

正文

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)


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

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


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

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))


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()


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







请到「今天看啥」查看全文