【问题标题】:在 R 中使用日期格式时绘制地图不渲染
【发布时间】:2022-01-18 23:49:31
【问题描述】:

我正在开展一个 Covid EDA 实践项目,我正在尝试创建一个随时间推移显示案例的地图。 在Our World in Data 提供的数据中,日期是一个字符串。如果我将日期保留为字符串 Plotly 会正确呈现地图,但日期不正确。我使用了以下代码:

cot_map <- country %>% 
  select(location, date, total_cases)

plot_geo(cot_map,
         locationmode = "country names",
         format = ~date) %>% 
  add_trace(locations = ~location,
            z = ~total_cases,
            zmin = 0,
            zmax = 51000000,
            color = ~total_cases)

如果我将日期强制转换为日期类型,它会在数据框中更改为日期,但 Plotly 会在查看器中以及在新窗口中打开它时呈现一个空白框(甚至不是图例)。这是我使用的代码:

cot_map <- country %>% 
  select(location, date, total_cases)
cot_map$date <- as.Date(cot_map$date, format = "%d/%m/%Y")

plot_geo(cot_map,
         locationmode = "country names",
         format = ~date) %>% 
  add_trace(locations = ~location,
            z = ~total_cases,
            zmin = 0,
            zmax = 51000000,
            color = ~total_cases)

我还尝试使用基本 R 和 lubridate 包转换为日期和 POSIX,但没有任何效果。我已经搜索了网络但未能找到解决方案。我正在使用最新版本的 RStudio Desktop。有没有人遇到过这种情况?

编辑

这是我使用的数据框的一小部分,其中包含对大多数国家/地区的大约 13 万个观察结果。

  iso_code    location       date total_cases
1      AFG Afghanistan 24/02/2020           5
2      AFG Afghanistan 25/02/2020           5
3      AFG Afghanistan 26/02/2020           5
4      AFG Afghanistan 27/02/2020           5
5      AFG Afghanistan 28/02/2020           5
6      AFG Afghanistan 29/02/2020           5
structure(list(iso_code = c("AFG", "AFG", "AFG", "AFG", "AFG", 
"AFG"), location = c("Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan"), date = c("24/02/2020", 
"25/02/2020", "26/02/2020", "27/02/2020", "28/02/2020", "29/02/2020"
), total_cases = c(5, 5, 5, 5, 5, 5)), row.names = c(NA, 6L), class = "data.frame")

【问题讨论】:

  • 请提供您的数据集的可重现示例。
  • 你的第一个代码 sn-p 给我:Warning message: 'choropleth' objects don't have these attributes: 'format'。你到底想对日期做什么?预期的输出是什么?

标签: r plotly r-plotly


【解决方案1】:

我不太确定这是怎么回事,因为 'choropleth' 对象没有您的代码建议的 format 属性。我猜你想要一个动画。

要为frame 属性提供日期,您需要将它们设为factor

library(plotly)
library(dplyr)

country <- structure(list(iso_code = c("AFG", "AFG", "AFG", "AFG", "AFG",
                          "AFG"), location = c("Afghanistan", "Afghanistan", "Afghanistan",
                          "Afghanistan", "Afghanistan", "Afghanistan"), date = c("24/02/2020",
                          "25/02/2020", "26/02/2020", "27/02/2020", "28/02/2020", "29/02/2020" ),
                          total_cases = seq(0, 51000000, length.out = 6)), row.names = c(NA, 6L), class =
                          "data.frame")


cot_map <- country %>% select(location, date, total_cases)
cot_map$date <- as.factor(as.Date(cot_map$date, format = "%d/%m/%Y"))

plot_geo(cot_map,
         locationmode = "country names",
         frame = ~date) %>% 
  add_trace(locations = ~location,
            z = ~total_cases,
            zmin = 0,
            zmax = 51000000,
            color = ~total_cases) %>%
  animation_slider(
    currentvalue = list(prefix = "Date: ")
  )

PS:我会使用max(country$total_cases) 来定义zmax

【讨论】:

  • 谢谢,成功了!我对这一切还很陌生,所以我还有很多东西要学。我不知道为什么我在这里使用format 属性,我正在学习教程并在我的项目中使用了frame。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2023-03-14
  • 1970-01-01
  • 2016-12-02
  • 2016-12-14
相关资源
最近更新 更多