r - 使用 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)
解决方案
该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()
推荐阅读
- excel - Excel - 有 BUT 函数吗?
- c# - 在同一区域显示其他 MDI 表单之前,如何确保 DataGridView 完全不可见?
- c - 与 for 循环递增规则混淆
- gcc - mpSoC 的编译器
- for-loop - 在 Xamarin 中使用 for 循环语句更改图像
- node.js - 如果未找到关系“xxx”,则序列化列“id”
- laravel-5 - SQLSTATE[HY000] [1045] 用户 [...] 访问被拒绝(使用密码:YES) Laravel 5.2 on Live Web Server
- r - 将网格放置在 shapefile 中的多边形上,然后找到每个网格正方形的质心
- javascript - 在控制台中看不到 WebdriverIO 日志(webdriver 日志)
- javascript - 未定义从 json 返回