ggplotly:如何让stat_smooth返回日期格式而非数字?
解决ggplot中stat_smooth预测线x轴日期显示为数字的问题
这个问题我之前也碰到过,核心原因是你在stat_smooth的aes里临时转换日期变量,导致ggplot没把它识别成日期尺度。来看看怎么改:
步骤1:预处理数据,确保日期列是标准Date类型
不要在绘图时临时转换日期,先把数据里的created_at_day转成Date类型:
# 转换日期列(如果还不是Date类型的话) df$created_at_day <- as.Date(df$created_at_day)
步骤2:修改绘图代码,让stat_smooth继承全局映射
去掉stat_smooth里对x轴的重复转换,直接复用全局的aes映射:
g <- ggplot(aes(x = created_at_day, y = sum, color = groups), data = df) + geom_line() + stat_smooth(method = "lm", se = TRUE) # 无需重新指定x/y,自动继承全局设置
如果因为特殊需求必须在stat_smooth里单独指定aes,也只修改需要覆盖的部分(比如颜色),不要碰x轴:
g <- ggplot(aes(x = created_at_day, y = sum, color = groups), data = df) + geom_line() + stat_smooth(aes(color = groups), method = "lm", se = TRUE)
问题根源解释
为什么原来的代码会显示数字?因为as.Date(created_at_day)在stat_smooth的aes里会生成一个临时的数值型变量(R中的Date本质是从1970-01-01开始计数的整数),ggplot会把这个临时变量当成全新的连续轴,而不是复用你全局aes里已经设置好的日期尺度,所以x轴就显示成了这些整数数字。
只要提前把数据里的日期列转成Date类型,然后让stat_smooth继承全局的x轴映射,它就会自动使用日期尺度,显示正常的日期格式啦。
内容的提问来源于stack exchange,提问作者mizzlosis
相关产品推荐
相关产品推荐

