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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:18:15