首页 > 解决方案 > 使用 date_break 命令绘制 x 轴级别时如何解决日期问题?

问题描述

这是我正在使用的数据和代码的头部。绘图时出现错误:输入无效:date_trans 仅适用于 Date 类的对象。如何摆脱这个?

> my_data
# A tibble: 3,722 x 19
   Year20              Year19              Year18              Year17              Year16              Year15             
   <dttm>              <dttm>              <dttm>              <dttm>              <dttm>              <dttm>             
 1 2020-03-01 00:00:00 2019-03-01 00:00:00 2018-03-01 00:00:00 2017-03-01 00:00:00 2016-03-01 00:00:00 2015-03-02 00:00:00
 2 2020-03-01 00:00:00 2019-03-01 00:00:00 2018-03-01 00:00:00 2017-03-01 00:00:00 2016-03-01 00:00:00 2015-03-03 00:00:00
 3 2020-03-01 00:00:00 2019-03-01 00:00:00 2018-03-01 00:00:00 2017-03-01 00:00:00 2016-03-01 00:00:00 2015-03-03 00:00:00

my_data <- read_excel("chhotanagpur.xlsx", sheet = "chhotanagpur")
my_data
my_data = as.data.frame(my_data)
f20 = as.data.frame(table(my_data$Year20))
f20$Var1 = as.Date(f20$Var1, "%Y-%m-%d")
f20$Var1 = format(f20$Var1, format="%m-%d")
library(ggplot2)
library(scales)
library(dplyr)
g <- ggplot() +
  geom_line(data = f20, aes(x=Var1, y=cumsum(Freq), group = 1, color = "#111111"), size = 1) +
  xlab('Date') +
  ylab('Cum_Freq')+
  scale_x_date(date_breaks="3 day", date_labels = "%d/%m")
plot(g)

标签: rggplot2scale

解决方案


format函数返回一个字符串而不是日期对象,这就是为什么scale_x_date不能处理它的原因。如果您在数据框上运行str,您可以看到每列的数据类型。例如,下图的第一次尝试将起作用,但第二次将失败:

df <- data.frame(date = as.Date(rep(Sys.time(), 10))) %>%
  mutate(date2 = format(date, format = "%m-%d"))

str(df)

'data.frame':   10 obs. of  2 variables:
 $ date : Date, format: "2020-07-23" "2020-07-23" "2020-07-23" "2020-07-23" ...
 $ date2: chr  "07-23" "07-23" "07-23" "07-23" ...
  
df %>%
  ggplot(aes(date)) +
  geom_histogram() +
  scale_x_date()

df %>%
  ggplot(aes(date2)) +
  geom_histogram() +
  scale_x_date()

推荐阅读