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
相关产品推荐
相关产品推荐

