如何在主X轴为数值型时,在次X轴显示日期?
解决ggplot底部数值X轴、顶部日期X轴的问题
错误原因说明
第一个代码报错是因为主X轴用的是数值型的day,但强行用scale_x_date设置顶部轴——scale_x_date仅支持Date类型的X变量,类型不匹配直接导致错误。
第二个方法的问题出在两处:
- 多余的
as.Date()转换:Sys.Date() + .本身已经是Date类型,无需重复转换 - 未确保
scales包已加载,导致date_format函数未生效,标签只能显示原始数字
正确实现代码
先加载所需工具包:
library(ggplot2) library(data.table) library(scales)
构造数据并完成绘图:
dt <- data.table(day = 1:3, value = c(2,3,1), date = Sys.Date() + 1:3) ggplot(dt, aes(x = day, y = value)) + geom_line() + scale_x_continuous( name = "天数", # 底部数值轴标题 sec.axis = sec_axis( ~ Sys.Date() + ., # 建立day与date的映射关系 name = "日期", # 顶部日期轴标题 labels = date_format("%Y-%m-%d") # 格式化日期显示样式 ) )
关键注意点
- 主副轴的转换函数必须严格匹配你的数据逻辑,这里
day的数值正好是起始日期的偏移量,所以用~ Sys.Date() + .就能对应上 - 一定要加载
scales包,否则date_format()函数无法识别,日期标签会保持数字状态
内容的提问来源于stack exchange,提问作者madsurgeon
相关产品推荐
相关产品推荐

