我有下面的代码,其中我拟合了一个对数线性模型,并绘制了拟合图
r1 = lm(log10(df$size) ~ df$time + ...)
plt <- ggplot(data = df, aes(x=time, y=size))+
geom_point(size = 0.1) + # Scatter
geom_line(aes(y = 10^predict(r1))) +
scale_y_log10()
dataframe df
包含3列,即datetime
、time
和size
。Time
是从datetime
进行的规范化转换,这样r1可以采用浮点值而不是datetime。datetime以10分钟递增。
| 日期时间|时间|大小|
| --------------|--------------|--------------|
| 2022-07-01 00:00:00|0|四|
| 2019 -07- 12 00:00:10|六百|三十四|
| 2019 -07- 21 00:00:20|一千二|十二岁|
我现在要分阶段的问题是,我想用datetime
值而不是time
值替换x轴值。
我们可以使用scale_x_continuous(breaks = df$time, labels = df$datetime)
,但是,这将在每个点上放置x个标签。相反,我想以某种方式使用默认选择的轴标签(可能使用waiver()
),然后从df$datetime
中选择相同索引处的值。
我尝试使用Manual addition of x-axes in ggplot with new labels?,但对我来说不同的是,我有另一个列的日期时间,我想利用。
2条答案
按热度按时间qlzsbp2j1#
正如@Z.Lin已经提到的那样,用另一列的值替换break的标签通常可以很容易地实现,但只有在ggplot 2设置的每个默认break的数据中有相应的值时才有效,而通常情况下(请参阅您的示例数据)不是这样。
一个选项是使用插值来设置
labels
,例如使用Hmisc::approxExtrap
:db2dz4w82#
由于
time
是数字,waiver()
选择的默认轴中断可能与df
中的值不完全匹配。由于数据集中的datetime变量在每行中以固定的量递增,也许以下方法可以为您工作?为了方便起见,我用5作为休息的次数;由GGPlot执行的确定中断数量的实际计算可能变得相当复杂。