微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的 x 轴在我的数据结束之前被截断,当我尝试添加 xlim() 时出现错误?

如何解决为什么我的 x 轴在我的数据结束之前被截断,当我尝试添加 xlim() 时出现错误?

我正在尝试制作盐度为 y 轴、日期/时间为 x 轴的散点图。但是,当我尝试绘制它时,我的 x 轴数据在数据结束之前被截断了。我尝试添加 xlim,但出现错误。见下文

p_OY1 <- ggplot(data = OY1,aes(x=date_time2,y=Salinity)) + geom_point() + ylim=c(0,12) + xlim=c("0019-10-04 00:00:00","0020-06-10 00:00:00")+ theme_classic()+
  scale_x_discrete("Date",breaks=c("0019-10-04 10:30:00","0019-11-01 00:00:00","0019-12-01 00:00:00","0020-01-01 00:00:00","0020-02-01 00:00:00","0020-03-01 00:00:00","0020-04-01 00:00:00","0020-05-01 00:00:00","0020-06-01 00:00:00"),labels=c("10/4/2019","11/1/2019","12/1/2019","1/1/2020","2/1/2020","3/1/2020","4/1/2020","5/1/2020","6/1/2020"))+ylab("Salinity")+ggtitle("OY1")

错误

c("0019-10-04 00:00:00","0020-06-10 00:00:00") + scale_x_discrete("Date",: 二元运算符的非数字参数

OY1 数据

> dput(head(OY1))
structure(list(Site = c("OY1","OY1","OY1"
),Date = c("10/4/19","10/4/19","10/4/19"),Time = structure(c(37800,39600,41400,43200,45000,46800),class = c("hms","difftime"),units = "secs"),Salinity = c(0.891307674,0.960962348,1.015788098,1.096679068,1.191564305,1.272517514
),Date_time = c("10/4/19 10:30:00","10/4/19 11:00:00","10/4/19 11:30:00","10/4/19 12:00:00","10/4/19 12:30:00","10/4/19 13:00:00")),row.names = c(NA,-6L),class = c("tbl_df","tbl","data.frame"),problems = structure(list(
    row = 4550L,col = "Salinity",expected = "a double",actual = "#VALUE!",file = "'~/Documents/TAMUG_Thesis/Rollover_Pass_Data/Logger/RP_LoggerData_OY1.csv'"),-1L),"data.frame")))

有人可以帮忙吗?我一直在搞这个太久了。谢谢!

解决方法

您的示例数据很有帮助,因为它表明 Date_time 列具有类字符。这就是 scale_x_datetime 未按预期工作的原因。

您可以通过多种方式将其转换为日期时间格式。一种是使用 lubridate 包。您的日期看起来像是日/月/年,因此您可以使用函数 dmy_hms 转换日期 + 时间。

看看这是否能让您入门。您需要尝试使用 date_breaks 才能得到您想要的。

library(lubridate)
library(dplyr)
library(ggplot2)

OY1 %>% 
  mutate(dt = lubridate::dmy_hms(Date_time)) %>% 
  ggplot(aes(dt,Salinity)) + 
  geom_point() + 
  scale_x_datetime(date_labels = "%d/%m/%Y")

使用示例数据的结果:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。