ggplotly 显示数字而不是日期标签

ggplotly showing numbers instead of date labels

我有一个具有以下结构的数据集:

    structure(list(mes = c(7, 7, 7, 4, 4), ano = c(2021, 2021, 2021, 
2021, 2021), nacionalidad = c("Venezuela", "Venezuela", "Venezuela", 
"Venezuela", "Venezuela"), centro = c("Aeropuerto Eldorado", 
"Aeropuerto Eldorado", "Aeropuerto Eldorado", "Aeropuerto Eldorado", 
"Aeropuerto Eldorado"), puesto = c("Aeropuerto Eldorado de Bogotá", 
"Aeropuerto Eldorado de Bogotá", "Aeropuerto Eldorado de Bogotá", 
"Aeropuerto Eldorado de Bogotá", "Aeropuerto Eldorado de Bogotá"
), transporte = c("Air", "Air", "Air", "Air", "Air"), ciudad = c("Arauca", 
"Bogotá", "Pereira", "Bogotá", "Bogotá"), flujo = c("Entries", 
"Entries", "Entries", "Entries", "Entries"), motivo = c("Tourism", 
"Tourism", "Tourism", "Transit", "Transit"), edad = c("0-17", 
"0-17", "0-17", "18-29", "18-29"), colombiano = c("Extranjeros", 
"Extranjeros", "Extranjeros", "Extranjeros", "Extranjeros"), 
    departamento = c("Arauca", "Bogota D.C.", "Risaralda", "Bogota D.C.", 
    "Bogota D.C."), region = c("América del Sur", "América del Sur", 
    "América del Sur", "América del Sur", "América del Sur"
    ), status = c("Permiso de Turismo", "Permiso de Turismo", 
    "Permiso de Turismo", "Permiso Otras Actividades", "Permiso Otras Actividades"
    ), departamento_2 = c("Bogotá", "Bogotá", "Bogotá", "Bogotá", 
    "Bogotá"), destino_procedencia = c("Emiratos Árabes", "Israel", 
    "Emiratos Árabes", "Panamá", "Panamá"), region_destino = c("Asia", 
    "Asia", "Asia", "América Central y el Caribe", "América Central y el Caribe"
    ), sexo = c("Male", "Male", "Male", "Male", "Male"), numero = c(1, 
    1, 1, 5, 5), date = structure(c(18809, 18809, 18809, 18718, 
    18718), class = "Date"), date2 = structure(c(18809, 18809, 
    18809, 18718, 18718), class = "Date")), row.names = c(NA, 
5L), class = "data.frame")

我想在 ggplotly 中按日期和其他变量(例如交通方式)绘制图表。图表是正确的,但日期中出现的标签显示数字而不是日期格式。数据库里的变量是日期格式的,我已经试过换成不同的格式还是不行。

我还想添加一些小的日期间隔,但似乎做不对。 这是我用于图表的代码:

chart9<-ggplot()+
  geom_line(data=Flow,
            aes(x=date,
                color=transporte), stat="count") +
  scale_x_date(date_minor_breaks = "1 month",
               date_labels = "%Y (%b)")+
  labs(color="Type of Flow")+
  ggtitle("Number of Entrances, by Month and Mode of Transportation, 2017-2021")+
  xlab("Date")+
  ylab("Number or People")
ggplotly(chart9)

这是绘制的图表

如有任何帮助,我们将不胜感激! :)

看起来日期 class 在使用 stat="count" 时被删除了。因此,实现您想要的结果的一种选择是在将数据集传递给 ggplot 之前聚合您的数据集,例如使用dplyr::count(Flow, date, transporte):

Flow <- dplyr::count(Flow, date, transporte, name = "count")

ggplot() +
  geom_line(data = Flow, aes(x = date, y = count, color = transporte)) +
  scale_x_date(
    date_minor_breaks = "1 month",
    date_labels = "%Y (%b)"
  ) +
  labs(color = "Type of Flow") +
  ggtitle("Number of Entrances, by Month and Mode of Transportation, 2017-2021") +
  xlab("Date") +
  ylab("Number or People")
ggplotly()

另外设置日期格式的第二个选项是使用 text“美学”并将您​​的数字转换回正确的日期:

library(plotly)

ggplot() +
  geom_line(data = Flow, aes(x = date, color = transporte, text = paste(
    "count:", ..count..,
    "<br>Date: ", format(as.Date(..x.., origin = "1970-01-01"), "%Y (%b)"),
    "<br>transporte: ", ..color..
  )), stat = "count") +
  scale_x_date(
    date_minor_breaks = "1 month",
    date_labels = "%Y (%b)"
  ) +
  labs(color = "Type of Flow") +
  ggtitle("Number of Entrances, by Month and Mode of Transportation, 2017-2021") +
  xlab("Date") +
  ylab("Number or People")
ggplotly(tooltip = c("text"))