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

R语言xts绘制FTSE时序图:去除图表与坐标轴空白及相关问题求助

R语言xts时间序列绘图问题解决方案

针对你提出的三个绘图问题,以下是可直接复用的修复方案及修改后代码:

问题修复逻辑

  • 问题1(移除底部与x轴空白):手动指定y轴取值范围,取消plot函数默认的自动边距缓冲,同时可调整绘图边距参数进一步压缩空白
  • 问题2(趋势线溢出绘图区):计算所有待绘制序列(原始指数、快慢均线)的取值上下限,把所有数据纳入y轴范围即可避免溢出
  • 问题3(添加左侧y轴轴线):提取序列起始日期的索引值,在该位置绘制贯穿y轴全范围的垂直线即可

修改后完整代码

# 原有数据处理逻辑保持不变
ftse = read.csv("data.csv", stringsAsFactors = F)
ftse.ts = xts(ftse[,-1], order.by = as.Date(ftse$Date , format = "%Y-%m-%d"))
ftse = ftse.ts[, "FTSE.Close"]
names(ftse) = "FTSE100"
fastMA.ftse = rollapply(data = ftse[!is.na(ftse)], width = 50, FUN = mean)
slowMA.ftse = rollapply(data = ftse[!is.na(ftse)], width = 200, FUN = mean)

# 新增:计算所有序列的取值范围,用于设置y轴边界
all_values <- c(ftse, fastMA.ftse, slowMA.ftse)
y_min <- min(all_values, na.rm = TRUE)
y_max <- max(all_values, na.rm = TRUE)
# 新增:提取起始日期(对应你提到的02-Jan-07,也可手动指定为as.Date("2007-01-02"))
start_date <- index(ftse)[1]

# 调整mar参数压缩四边空白,四个值分别对应下、左、上、右边距
par(mfrow = c(1,1), family="serif", mar = c(3,3,1,1)) 
# 绘图时手动指定ylim,取消自动缓冲
plot(ftse, col="dark blue", lwd=1, ylim = c(y_min, y_max))
lines(slowMA.ftse, col="red", lty=2)
lines(fastMA.ftse, col="orange", lty=2)
# 新增:绘制左侧y轴轴线
lines(x = rep(start_date, 2), y = c(y_min, y_max), lwd = 1)

补充说明

如果需要进一步调整底部空白大小,可以修改par中mar参数的第一个值,数值越小底部边距越窄。

内容的提问来源于stack exchange,提问作者Just_a_tired_student

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:06:04