ggplot绘制10年周期数据时x轴刻度间隔不一致,如何统一?
问题原因
ggplot2的日期轴默认会根据数据的时间范围、绘图区域大小自动适配刻度间隔,即使总时长相同,不同时间段的自动计算逻辑也可能出现刻度间隔不一致的情况,手动指定刻度规则即可解决。
解决方法1:修改现有代码,逐个指定x轴刻度
给每一段ggplot绘图代码都添加scale_x_date()参数,统一设置刻度间隔和显示格式即可,示例如下:
# 以第一个子图为例,另外两个子图添加完全相同的scale_x_date配置即可 ggplot(data =before2000, aes(x= YYYYMM, y=values, color= key ))+ geom_line()+ # 统一设置每2年显示一个刻度,仅展示年份;如果要统一为5年间隔,把date_breaks改为"5 years"即可 scale_x_date(date_breaks = "2 years", date_labels = "%Y") + labs(title = "Panel A: Riskmanaged momentum: 1930:01 to 1939:12", y="累计收益率", x="")+ theme_classic()
解决方法2:合并数据用分面绘图,一次配置全局生效
你三个子集的数据处理逻辑完全一致,可先给子集打标签后合并,用分面功能一次生成三张图,仅需设置一次x轴规则即可自动统一,还能减少重复代码:
# 给三个子集添加分组标签 before2000$panel <- "Panel A: 1930:01至1939:12" after2000$panel <- "Panel B: 2000:01至2010:12" after2010$panel <- "Panel C: 2011:01至2020:12" # 合并为全量数据集 plot_data <- rbind(before2000, after2000, after2010) # 分面绘图 ggplot(plot_data, aes(x=YYYYMM, y=values, color=key)) + geom_line() + scale_x_date(date_breaks = "2 years", date_labels = "%Y") + labs(title = "风险调整后动量策略表现", y="累计收益率", x="") + # 每个分面使用独立的x轴范围,无需共用时间轴 facet_wrap(~panel, scales = "free_x") + theme_classic()
内容的提问来源于stack exchange,提问作者Neg
相关产品推荐
相关产品推荐

