You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R car包绘制随访完成度图时x轴POSIXct格式日期正确显示方法

问题原因

car包的scatterplot()函数默认不会保留POSIXct类型的日期属性,绘制时会自动将日期转为底层的数值型时间戳,因此x轴会显示为无意义的数字而非格式化日期。

可行解决方案

方案1:保留原有scatterplot逻辑,自定义x轴

在原有代码基础上关闭默认轴输出,手动指定日期格式生成x轴即可,修改后代码如下:

# 原有数据构造代码不变
Date.Interventon = as.POSIXct('1/27/2017', format='%m/%d/%Y') + 1:40*60
Status<- c ("Alive","Dead","Dead","Dead","Alive","Alive","Dead","Dead","Alive","Dead")
OS.years <-c(11,13,14,13,13,10,13,14,10,11)
data.fu.lorenzoo= data.frame(Date.Interventon,Status, OS.years)

library(car)
# 绘制时关闭默认坐标轴
scatterplot(OS.years ~ Date.Interventon | Status, data=data.fu.lorenzoo, 
             xlab = "Date of procedure",
             ylab = "Follow-up (years)", 
             smooth = F,
             regLine = T,
             axes = F)
# 手动添加y轴
axis(side=2)
# 手动添加x轴,可自定义format参数调整日期显示格式
axis.POSIXct(side=1, at = pretty(Date.Interventon), format = "%Y-%m-%d %H:%M", las=2)
# 补全图框
box()

你可以调整format参数的日期规则适配显示需求,常用规则包括%Y四位年、%m两位月、%d两位日、%H小时、%M分钟。

方案2:改用ggplot2实现同等效果,日期轴控制更灵活

ggplot2原生支持POSIXct类型的轴格式调整,不需要额外处理轴的底层转换,代码如下:

library(ggplot2)
ggplot(data.fu.lorenzoo, aes(x=Date.Interventon, y=OS.years, color=Status, shape=Status)) +
  geom_point(size=2) +
  # 分组添加线性回归线,和scatterplot的regLine效果一致
  geom_smooth(method = "lm", se=F) +
  labs(x="Date of procedure", y="Follow-up (years)") +
  # 直接调整x轴日期格式和间隔
  scale_x_datetime(date_labels = "%Y-%m-%d %H:%M", date_breaks = "2 hours") +
  theme_bw() +
  theme(axis.text.x = element_text(angle=45, hjust=1))

如果需要调整日期间隔,修改date_breaks参数即可,支持"1 hour"、"1 day"等多种粒度。

内容的提问来源于stack exchange,提问作者Mohamed Rahouma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:36:03