第七章 时间序列可视化课堂练习

Author

221527115杨诗婷

1 案例数据

1.1 all_stock_2024:工商银行、招商应用、中信证券和贵州茅台四个股票2024各天交易数据

  • data为为日期变量,但该日期变量不规则(不连续),周末和公众假期没有交易数据;

  • 编码名称用于识别不同股票,注意不同股票有交易数据日期不一定一致,但本例种各股票均有242个交易日数据;

  • 开盘价到换手率 均为数值变量,开盘价到成交量与每股资产有关,不同股票间不可比;

  • 交易量的单位为手(百股)、成交额的单位为元,振幅等四个变量均为相对指标。

2 折线图和面积图

2.1 合并折线图

  • 将四只股票的涨跌幅 做作折线图,将四条折线在同一个图形输出;

  • 日期截取2024-9-12024-10-31

  • 添加一条纵轴为0的参考线,采用twodash 的线型;

  • 将图标题改为“合并涨跌幅折线图”。

2.2 分面折线图

  • 将四只股票的收盘 价格做作折线图,将四条折线图分面输出;

  • 日期截取一整年;

  • 并使用ggpol::geom_tshighlight2024-9-12024-10-31 时间段高亮显示

2.3 面积图

  • 将四只股票的成交量 价格做作面积图,将四个面积图分面输出;

  • 将成交量的单位改为万手

2.4 图形观察和代码编写的心得体会

  • 1.合并折线图能直观对比多组数据趋势,但需注意颜色区分度和图例位置。代码中通过aes(color=名称)实现自动分色,图例内嵌避免遮挡数据。

    1. 日期筛选使用filter()配合逻辑运算符,注意日期格式需与数据一致。横轴日期标签通过scale_x_date()灵活控制,breaks和labels参数配合提升可读性。

    2. 参考线用geom_hline()添加,twodash线型比虚线更醒目。标题修改直接通过ggtitle()实现,建议统一使用主题设置规范字体大小。

    3. 分面绘图时facet_wrap()配合scale=“free”能自适应刻度,但需注意分面过多会导致图形过小。成交量单位转换(/10000)直接在aes()中处理更高效。

    4. 主题优化经验:移除次要网格线(panel.grid.minor)提升简洁性,x轴文本旋转(angle=90)避免标签重叠,图例删除(legend.position=“none”)在分面时更合理。

    5. 交互高亮(geom_tshighlight)需确保日期格式转换正确,alpha参数控制填充透明度避免遮挡主线。

    6. 面积图适合展示体量变化,y轴标签通过ylab()动态更新单位,注意单位换算需在图表中明确标注。

3 流线图和地平线图

3.1 流线图

  • 将四只股票的成交额 做作流线图,将四个面积图分面输出;

  • 将成交额的单位改为亿元

3.2 地平线图

  • 采用ggHoriPlot::geom_horizon函数,对四只股票的成交额 做作地平线图
  • 设置原点为均值origin='mean',输出配色图例

3.3 图形观察和代码编写的心得体会

  • 1. 流线图(Stream Plot)

    • 用途:适用于展示多组时间序列数据的 相对占比变化,比堆叠面积图更流畅自然。
      关键参数

      • bw(带宽)控制平滑度,值越小越精细,但可能产生锯齿。
      • groupfill 确保数据按股票分组并填充颜色。
      • ylab() 直接修改单位(亿元),避免后续误解。
        2. 地平线图(Horizon Plot)

      用途:紧凑展示 数据偏离基准(如均值)的程度,适合高密度时间序列对比。
      关键参数

      • origin='mean' 以均值为基准,正负值用不同颜色区分。
      • horizonscale=10 控制分层数量,值越大颜色过渡越细腻。
      • scale_fill_hcl(palette='RdYlBu') 使用红-黄-蓝渐变,增强正负对比。

4 不规则时间序列图

4.1 数据准备

  • 通过zoo::rollmean 时间收盘价的5天、10天和20天的移动平均

  • 将日期变量转化为id变量

4.2 平滑曲线图

  • 将四只股票收盘价和3种移动平均的折线图分面输出;

  • 横轴的每隔30天一个刻度,只显示月/日;

4.3 K线图

  • 选择工商银行数据作出,2024年的K线图

  • scale_x_continuous 将横轴坐标刻度转化回日期型

4.4 图形观察和代码编写的心得体会

  • 1. 数据准备(移动平均计算)

    • zoo::rollmean 计算移动平均时,关键参数:
      • k 控制窗口大小(5/10/20天),align="right" 表示右对齐(当前点及前k-1天)。
      • fill=NA 避免初始无移动平均值的点被插值干扰。
        数据转换
      • 将日期转为 date_index(连续整数)便于后续横轴刻度调整,但需注意 日期与索引的映射关系,避免标签错位。

    4.4.1 2. 平滑曲线图(分面输出)

    • 数据整理
      • gather() 将收盘价和移动平均线转为长格式,适合 ggplot2 绘图。
    • 横轴优化
      • scale_x_continuous(breaks=seq(1, 242, by=30)) 每30天一个刻度,labels 通过日期索引映射回“月-日”格式。
    • 分面技巧
      • facet_wrap(~名称, ncol=2, scale="free") 自由刻度适配不同股票价格范围,ncol=2 控制布局。

    4.4.2 3. K线图(工商银行)

    • 核心元素
      • 柱体(蜡烛)geom_rect 用矩形表示开盘-收盘区间,fill 按涨跌(红涨绿跌)。
      • 影线geom_segment 绘制最高-最低价线段。
      • 移动平均线:叠加 geom_line,通过 color 区分不同周期。
    • 横轴日期还原
      • scale_x_continuous(labels=format(...)) 将索引映射回日期标签,确保刻度与数据对齐。

    4.4.3 通用经验总结

    1. 移动平均计算
      • 窗口大小需结合分析目标(短期波动用 ma5,长期趋势用 ma20)。
      • 缺失值处理(如 fill=NA)避免误导性平滑。
    2. 时间轴处理
      • 索引化日期可简化刻度控制,但需谨慎映射标签(如 seq(1, nrow(df), by=30))。
    3. 分面与图例
      • 分面图建议移除冗余图例(guides(color="none")),避免重复。
    4. K线图细节
      • 影线宽度(x ± 0.4)和颜色对比(红/绿)直接影响可读性。
      • 移动平均线颜色需与K线区分(如蓝/橙/紫)。