【问题标题】:R Highcharter map with hc_motionR Highcharter 地图与 hc_motion
【发布时间】:2019-05-26 14:42:52
【问题描述】:

我正在尝试使用 R 中的 highcharter 创建一个像这样的运动图http://jkunst.com/r/adding-motion-to-choropleths/
但是我有一个问题:数据没有可视化

df<-structure(list(fips = c("ARG", "ARG", "ARG", "ARG", "ARG", "ARG", 
"ARG", "ARG", "ARG", "ARG", "ARG", "ARG", "ARG", "ARG", "ARG", 
"ARG", "ARG", "ARG", "ARG", "ARG", "ARG", "ARG", "ARG", "ARG", 
"ARG", "ARG", "ARG", "ARG", "AUS", "AUS", "AUS", "AUS", "AUS", 
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", 
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", 
"AUS", "AUS", "AUS", "AUS", "AUS", "CAN", "CAN", "CAN", "CAN", 
"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", 
"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", 
"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "DEU", "DEU", "DEU", 
"DEU", "DEU", "DEU", "DEU", "DEU", "DEU", "DEU", "DEU", "DEU", 
"DEU", "DEU", "DEU", "DEU", "DEU", "DEU", "DEU", "DEU", "DEU", 
"DEU", "DEU", "DEU", "DEU", "DEU", "DEU", "DEU", "GBR", "GBR", 
"GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "GBR", 
"GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "GBR", 
"GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "GBR", "ITA", 
"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", 
"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", 
"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", 
"ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", 
"ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", 
"ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", "ROU", 
"ROU", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", 
"RUS", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", 
"RUS", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", "RUS", 
"RUS", "RUS", "USA", "USA", "USA", "USA", "USA", "USA", "USA", 
"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", 
"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", 
"USA", "USA", "USA"), sm = c("Sep 2016", "Oct 2016", "Nov 2016", 
"Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017", "Apr 2017", "May 2017", 
"Jun 2017", "Jul 2017", "Aug 2017", "Sep 2017", "Oct 2017", "Nov 2017", 
"Dec 2017", "Jan 2018", "Feb 2018", "Mar 2018", "Apr 2018", "May 2018", 
"Jun 2018", "Jul 2018", "Aug 2018", "Sep 2018", "Oct 2018", "Nov 2018", 
"Dec 2018", "Sep 2016", "Oct 2016", "Nov 2016", "Dec 2016", "Jan 2017", 
"Feb 2017", "Mar 2017", "Apr 2017", "May 2017", "Jun 2017", "Jul 2017", 
"Aug 2017", "Sep 2017", "Oct 2017", "Nov 2017", "Dec 2017", "Jan 2018", 
"Feb 2018", "Mar 2018", "Apr 2018", "May 2018", "Jun 2018", "Jul 2018", 
"Aug 2018", "Sep 2018", "Oct 2018", "Nov 2018", "Dec 2018", "Sep 2016", 
"Oct 2016", "Nov 2016", "Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017", 
"Apr 2017", "May 2017", "Jun 2017", "Jul 2017", "Aug 2017", "Sep 2017", 
"Oct 2017", "Nov 2017", "Dec 2017", "Jan 2018", "Feb 2018", "Mar 2018", 
"Apr 2018", "May 2018", "Jun 2018", "Jul 2018", "Aug 2018", "Sep 2018", 
"Oct 2018", "Nov 2018", "Dec 2018", "Sep 2016", "Oct 2016", "Nov 2016", 
"Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017", "Apr 2017", "May 2017", 
"Jun 2017", "Jul 2017", "Aug 2017", "Sep 2017", "Oct 2017", "Nov 2017", 
"Dec 2017", "Jan 2018", "Feb 2018", "Mar 2018", "Apr 2018", "May 2018", 
"Jun 2018", "Jul 2018", "Aug 2018", "Sep 2018", "Oct 2018", "Nov 2018", 
"Dec 2018", "Sep 2016", "Oct 2016", "Nov 2016", "Dec 2016", "Jan 2017", 
"Feb 2017", "Mar 2017", "Apr 2017", "May 2017", "Jun 2017", "Jul 2017", 
"Aug 2017", "Sep 2017", "Oct 2017", "Nov 2017", "Dec 2017", "Jan 2018", 
"Feb 2018", "Mar 2018", "Apr 2018", "May 2018", "Jun 2018", "Jul 2018", 
"Aug 2018", "Sep 2018", "Oct 2018", "Nov 2018", "Dec 2018", "Sep 2016", 
"Oct 2016", "Nov 2016", "Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017", 
"Apr 2017", "May 2017", "Jun 2017", "Jul 2017", "Aug 2017", "Sep 2017", 
"Oct 2017", "Nov 2017", "Dec 2017", "Jan 2018", "Feb 2018", "Mar 2018", 
"Apr 2018", "May 2018", "Jun 2018", "Jul 2018", "Aug 2018", "Sep 2018", 
"Oct 2018", "Nov 2018", "Dec 2018", "Sep 2016", "Oct 2016", "Nov 2016", 
"Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017", "Apr 2017", "May 2017", 
"Jun 2017", "Jul 2017", "Aug 2017", "Sep 2017", "Oct 2017", "Nov 2017", 
"Dec 2017", "Jan 2018", "Feb 2018", "Mar 2018", "Apr 2018", "May 2018", 
"Jun 2018", "Jul 2018", "Aug 2018", "Sep 2018", "Oct 2018", "Nov 2018", 
"Dec 2018", "Sep 2016", "Oct 2016", "Nov 2016", "Dec 2016", "Jan 2017", 
"Feb 2017", "Mar 2017", "Apr 2017", "May 2017", "Jun 2017", "Jul 2017", 
"Aug 2017", "Sep 2017", "Oct 2017", "Nov 2017", "Dec 2017", "Jan 2018", 
"Feb 2018", "Mar 2018", "Apr 2018", "May 2018", "Jun 2018", "Jul 2018", 
"Aug 2018", "Sep 2018", "Oct 2018", "Nov 2018", "Dec 2018", "Sep 2016", 
"Oct 2016", "Nov 2016", "Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017", 
"Apr 2017", "May 2017", "Jun 2017", "Jul 2017", "Aug 2017", "Sep 2017", 
"Oct 2017", "Nov 2017", "Dec 2017", "Jan 2018", "Feb 2018", "Mar 2018", 
"Apr 2018", "May 2018", "Jun 2018", "Jul 2018", "Aug 2018", "Sep 2018", 
"Oct 2018", "Nov 2018", "Dec 2018"), value = c(0, 13, 1397, 12134, 
6938, 13193, 6947, 6990, 7112, 7233, 13838, 18109, 9700, 19612, 
18048, 6441, 7528, 9947, 8073, 5862, 5991, 5501, 6294, 6960, 
5350, 4479, 3612, 3143, 0, 12845, 28060, 35813, 37810, 35687, 
39469, 37079, 34033, 29262, 31483, 29198, 22719, 19749, 17035, 
18740, 19646, 16118, 18970, 18930, 23074, 22650, 25215, 23299, 
21329, 19246, 20893, 17106, 0, 11964, 33654, 54440, 51427, 55324, 
51136, 41176, 40035, 33106, 34155, 34207, 26175, 21376, 16997, 
17213, 18211, 15071, 17266, 15598, 15431, 16155, 16082, 18322, 
17276, 17654, 17282, 14001, 0, 737, 3225, 9009, 9324, 9780, 7361, 
7584, 12033, 24794, 25236, 27493, 27189, 20672, 17579, 17706, 
19280, 17461, 18950, 14288, 15485, 15241, 15148, 16124, 14720, 
15279, 16888, 13580, 0, 4020, 21926, 27982, 32928, 39744, 46413, 
34679, 35026, 32160, 33611, 33234, 29394, 23364, 20977, 23407, 
26501, 21561, 23497, 20090, 21115, 18817, 18255, 21492, 21852, 
19908, 18862, 16447, 0, 218, 2611, 8126, 5907, 10862, 5104, 4956, 
13169, 22457, 25120, 18480, 15580, 14720, 13146, 16750, 16321, 
18067, 15336, 13460, 12949, 9010, 10691, 12153, 13791, 16114, 
12893, 10122, 0, 60, 1143, 4251, 3754, 6211, 3291, 2570, 5673, 
8171, 9279, 12914, 9675, 7521, 5621, 9473, 7104, 12808, 10212, 
8591, 6588, 5055, 6374, 6811, 8072, 11054, 9431, 9558, 0, 122, 
1004, 2713, 2554, 2642, 3946, 4355, 3526, 3945, 3792, 5631, 7642, 
11354, 13887, 12825, 16926, 15920, 14848, 13762, 13429, 10786, 
11194, 11214, 9251, 11578, 13808, 14115, 2, 43253, 213319, 332907, 
366366, 368012, 392814, 302207, 283924, 260065, 274796, 269966, 
235781, 190387, 166872, 195390, 207261, 166208, 176403, 178703, 
192598, 191750, 207203, 211225, 184818, 192932, 214297, 179867
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-252L))

my_ds <- df %>% 
  group_by(fips) %>% 
  do(item = list(
    fips = first(.$fips),
    sequence = .$value,
    value = first(.$value))) %>% 
  .$item


url <- "https://code.highcharts.com/mapdata/custom/world.js"
tmpfile <- tempfile(fileext = ".json")
download.file(url, tmpfile)
us <- readLines(tmpfile)
us <- gsub(".* = ", "", us)
map <- jsonlite::fromJSON(us, simplifyVector = FALSE)


highchart(type = "map") %>% 
  hc_add_series(data = my_ds,
                mapData = map,
                joinBy = "fips",
                borderWidth = 0.01) %>% 
  hc_colorAxis(stops = color_stops()) %>%  
  hc_title(text = "How the Epidemic of Drug Overdose Deaths Ripples") %>% 
  hc_legend(layout = "vertical", reversed = TRUE,
            floating = TRUE, align = "right") %>% 
  hc_add_theme(hc_theme_smpl()) %>% 
  hc_motion(
    enabled = TRUE,
    axisLabel = "year",
    labels = unique(as.character(df$sm)),
    series = 0,
    updateIterval = 50,
    magnet = list(
      round = "floor",
      step = 0.1
    )
  )

【问题讨论】:

    标签: r highcharts data-visualization r-highcharter


    【解决方案1】:

    问题是您使用的世界地图数据没有fips(这些是美国县代码),因此joinBy="fips" 无法按您期望的方式工作。

    您的数据集的国家/地区代码对应于世界地图iso-a3 代码。如果您使用这些而不是fips,它将按预期工作:

    my_ds <- df %>% rename(`iso-a3` = fips) %>% 
      group_by(`iso-a3`) %>% 
      do(item = list(
        `iso-a3` = first(.$`iso-a3`),
        sequence = .$value,
        value = first(.$value))) %>% 
      .$item
    
    highchart(type = "map") %>% 
      hc_add_series(data = my_ds,
                    mapData = map,
                    joinBy = "iso-a3",
                    borderWidth = 0.01) %>% 
      hc_colorAxis(stops = color_stops()) %>%  
      hc_title(text = "How the Epidemic of Drug Overdose Deaths Ripples") %>% 
      hc_legend(layout = "vertical", reversed = TRUE,
                floating = TRUE, align = "right") %>% 
      hc_add_theme(hc_theme_smpl()) %>% 
      hc_motion(
        enabled = TRUE,
        axisLabel = "year",
        labels = unique(as.character(df$sm)),
        series = 0,
        updateIterval = 50,
        magnet = list(
          round = "floor",
          step = 0.1
        )
      )
    

    【讨论】:

    • 或者,也可以将joinBy = c("iso-a3", "fips") 与原始代码一起使用。
    • 谢谢各位,还有一个问题。如何用这个代码get_data_from_map(download_map_data("custom/world"))替换map
    • 您在该文件中没有与 fips 变量相同的国家/地区代码。您需要替换国家代码才能加入它们。它可以很容易地完成(我认为),因为旧地图数据中的 iso-a2 变量包含与新地图数据集中的 hc-a2 变量相同的映射,因此快速合并可以解决它
    猜你喜欢
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多