R语言ts.plot绘图去除刻度与外框、保留坐标轴的实现方法
问题原因
ts.plot是R中专门用于多时间序列合并绘图的泛型函数,它不会自动将xaxt/yaxt/bty这类基础图形参数透传给内部调用的底层绘图逻辑,因此直接把这些参数写在ts.plot()的入参位置不会产生任何效果。
实现方法
按照以下步骤调整即可满足需求:
- 提前通过
par()设置全局绘图参数,在调用ts.plot前就关闭默认坐标轴、移除绘图外框 - 绘图完成后手动调用
axis()函数添加x轴、y轴的基准轴线,设置不显示刻度和刻度标签 - 最后按原有需求补全y轴标签、标题、图例即可
注意:你提供的示例代码中构造时间序列对象时列名存在笔误,数据框存储的列名为ioer_ex和avg_intrate_trans_ex,原代码写的ioer、avg_intrate_trans会触发对象不存在的报错,下面的可复现代码已经修正该问题。
完整可运行代码
# 构造示例数据集 data_example <- data.frame( date = c("2008-10-01", "2009-01-01", "2009-04-01", "2009-07-01", "2009-10-01", "2009-10-01", "2009-10-01", "2010-01-01", "2010-04-01", "2010-07-01", "2010-10-01"), ioer_ex = c(0.79, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25), avg_intrate_trans_ex = c(0.01, 0.05, 0.03, 0.02, 0.01, 0.03, 0.04, 0.07, 0.08, 0.06, 0.02) ) # 声明时间序列变量 IOER <- ts(data_example$ioer_ex, start = c(2008,4), frequency = 4) deposit_rate <- ts(data_example$avg_intrate_trans_ex, start = c(2008,4), frequency = 4) # 提前配置绘图参数:关闭默认坐标轴、移除外框 par(mfrow = c(1,1), xaxt = "n", yaxt = "n", bty = "n") # 绘制双时间序列线 ts.plot(IOER, deposit_rate, col = c("cornflowerblue", "firebrick1"), xlab = "", ylab = "", lwd = 2, lty = c(1,2)) # 手动添加x、y基准轴线,不显示刻度与刻度标签 axis(side = 1, labels = FALSE, tick = FALSE, lwd = 1) axis(side = 2, labels = FALSE, tick = FALSE, lwd = 1) # 添加y轴标签 title(ylab = "Percentage") # 添加图表标题 title(main = "Percent, Oct. 2008-Oct. 2019", adj = 0, line = 0.25, font.main = 1) # 添加图例 legend("topleft", bty = "n", lty = c(1,2), col = c("cornflowerblue","firebrick1"), legend = c("Interest on Excess Reserves", "Average Interest Rate on Transactions"))
运行上述代码后,最终输出的图表将完全符合要求:无多余外围边框、无坐标轴刻度标记,仅保留x轴与y轴的基准轴线,原有线条样式、标题、标签、图例效果均不受影响。
内容的提问来源于stack exchange,提问作者OGC
相关产品推荐
相关产品推荐

