R ggplot2:POSIXct轴-确保第一次大断裂发生在任何小断裂之前

R ggplot2:POSIXct轴-确保第一次大断裂发生在任何小断裂之前,r,ggplot2,axis-labels,R,Ggplot2,Axis Labels,在ggplot2中,有一种默认行为对我来说总是有点奇怪,我觉得这种行为令人沮丧,并可能导致绘图比实际情况更难阅读。基本上,似乎没有默认在小休息之前有大休息,如果他们都是整数(即约会的两个中午),这似乎特别奇怪。这可能意味着,对于一个6天的绘图窗口,直到绘图开始2.5天才有日期标签 因此,我正在寻找一种自动化的方法,可以处理所有长度的绘图,以确保第一个断点始终是主要的,这样标签就不会在绘图的三分之一处开始 例如,在自动中断中,它们是黑色的,我希望它们位于红色显示的点上,这样第一个完整的数据日就有一

ggplot2
中,有一种默认行为对我来说总是有点奇怪,我觉得这种行为令人沮丧,并可能导致绘图比实际情况更难阅读。基本上,似乎没有默认在小休息之前有大休息,如果他们都是整数(即约会的两个中午),这似乎特别奇怪。这可能意味着,对于一个6天的绘图窗口,直到绘图开始2.5天才有日期标签

因此,我正在寻找一种自动化的方法,可以处理所有长度的绘图,以确保第一个断点始终是主要的,这样标签就不会在绘图的三分之一处开始

例如,在自动中断中,它们是黑色的,我希望它们位于红色显示的点上,这样第一个完整的数据日就有一个日期标签。我认为这可能是偶数/奇数天的事情,但如果我移动数据一天,同样的事情也会发生

其目的是我的绘图将在自己的函数中进行,该函数可以提供从几个小时到几个星期的事件数据,因此我不想硬编码任何中断或类似于
date\u breaks=“1天”
,因为我希望它能用于任何绘图窗口

类似地,对于仅持续几个小时的数据,第一个标签几乎可以沿着轴的一半,如中所示。这里默认的小休息时间是1.5小时,因此只交换大休息时间和小休息时间是没有意义的,但最好在10:00、13:00或10:00、12:00、14:00、16:00休息

这里是reprex来制作我的两个示例图

library(ggplot2)
#first plot
testdf <- data.frame(DateTime = seq.POSIXt(as.POSIXct("2018-03-24 10:00"),
                 by = "hour", length.out = 150),y = rnorm(150))
ggplot(testdf, aes(x = DateTime, y = y))+geom_point()+scale_x_datetime()
#second plot
testdf2 <- data.frame(DateTime = seq.POSIXt(as.POSIXct("2018-03-25 10:00"), 
                by = "min", length.out = 360),y = rnorm(360))
ggplot(testdf2, aes(x = DateTime, y = y))+geom_point()
库(ggplot2)
#第一个情节

testdf Hi,对我来说,不清楚您是否满意
date\u breaks=“1天”
结果,或者它是否仍然与它不同?因为如果您是,您可以编写一些函数来检查时差,并返回小时/天/月和自定义标签。我对默认的中断次数很满意,我只希望标签开始时更靠近绘图的左侧。我不想硬编码
date\u breaks=“1天”
,因为如果我的绘图窗口为~<2天或超过~>7天,这将不起作用。我必须提出建议。一种是制作自己的中断序列,问题是它会弄乱你的标签。第二种情况是,如果{}else{}你把数据放在什么地方,第一个和最后一个日期是什么时候,是24小时,那么就每小时更新一次,每天更新一次,每月更新一次。我两个都在工作,但不确定这是否有助于解决您的问题。您好,我不清楚您是否对
date\u breaks=“1天”
结果感到满意,或者它是否仍然应该与它不同?因为如果您是,您可以编写一些函数来检查时差,并返回小时/天/月和自定义标签。我对默认的中断次数很满意,我只希望标签开始时更靠近绘图的左侧。我不想硬编码
date\u breaks=“1天”
,因为如果我的绘图窗口为~<2天或超过~>7天,这将不起作用。我必须提出建议。一种是制作自己的中断序列,问题是它会弄乱你的标签。第二种情况是,如果{}else{}你把数据放在什么地方,第一个和最后一个日期是什么时候,是24小时,那么就每小时更新一次,每天更新一次,每月更新一次。我两个都在工作,但不确定这是否有助于解决你的问题。