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

Author

221527229 方景鑫

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 图形观察和代码编写的心得体会

  • 2.4.0.1 一、数据预处理要点

    1. 日期筛选与转换

      • 使用filter()精确截取时间段(如 2024-09-01 至 2024-10-31),确保数据时效性

      • 需将日期列转换为 Date 类型(as.Date()),避免绘图时出现轴标签异常

    2. 单位换算

      • 成交量 / 额等金融数据常需转换单位(如万手、亿元),提升可读性

      • 使用mutate()创建新列进行单位换算,避免直接修改原始数据

    2.4.0.2 二、可视化设计技巧

    1. 合并折线图优化

      • 通过geom_hline(yintercept = 0)添加参考线,辅助分析涨跌趋势

      • 使用theme()调整图例位置(如legend.position = c(0.1, 0.8)),避免遮挡数据

      • 采用scale_color_manual()自定义颜色方案,增强辨识度

    2. 分面图的应用

      • 使用facet_wrap()按股票名称分面展示,实现多组数据并行比较

      • 设置scales = "free_y"使各子图 Y 轴独立,避免因数值范围差异导致的视觉偏差

      • 通过ggpol::geom_tshighlight()高亮特定时间段,突出关键数据区间

    3. 面积图的特性

      • 面积图适合展示数据累积效应,但需注意:

        • 数据存在负值时可能导致面积重叠(可通过geom_ribbon()替代)

        • 多类别面积图需确保颜色透明度(alpha参数),避免底层数据被遮挡

    2.4.0.3 三、常见问题与解决方案

    1. 日期轴标签问题

      • 使用scale_x_date()配合date_breaksdate_labels精确控制刻度间隔与格式

      • 针对长时间段数据,可结合theme(axis.text.x = element_text(angle = 45))避免标签重叠

    2. 缺失值处理

      • 移动平均线计算会产生 NA 值,需通过filter(!is.na())na.omit()过滤

      • 使用geom_line(na.rm = TRUE)在绘图时忽略 NA 值,保持线条连续性

    3. 图例优化

      • 分面图中重复图例易造成冗余,可通过theme(legend.position = "none")移除

      • 使用labs()自定义标题、轴标签和图例名称,提升图表自解释性

3 流线图和地平线图

3.1 流线图

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

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

3.2 地平线图

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

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

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

4.4.1 数据整理技巧

  • 宽转长格式处理:通过gather()函数将收盘价与各移动平均线数据从宽格式转换为长格式,为后续ggplot绘图提供标准数据结构。

  • 列选择策略:利用select()函数精准筛选目标列,剔除冗余信息。

4.4.2 可视化实现要点

  • 分面展示设计:借助facet_wrap()实现分面绘图,搭配scale="free"参数使各子图独立设置 Y 轴范围,提升多维度数据的可读性。

  • 坐标轴精细控制:通过scale_x_continuous()结合breakslabels参数,自定义 X 轴刻度显示规则。

  • 图例优化处理:使用guides(color="none")移除不必要的颜色图例,避免视觉干扰。

4.4.3 关键注意事项

  • 移动平均计算特性:窗口大小为 N 时,计算结果前 N-1 行将生成 NA 值(需提前处理缺失值)。

  • 日期格式规范:需兼顾显示空间与可读性,避免日期标签重叠或信息模糊。

  • 分面尺度一致性:需校验各子图数据尺度是否具备可比性,避免因尺度差异导致分析偏差。

4.4.4 优化拓展方向

  • 图表可读性增强:补充主标题与轴标签,明确数据含义。

  • 多维度数据整合:考虑添加交易量数据作为副图,丰富金融分析维度。

  • 布局灵活组合:尝试使用cowplotpatchwork包实现图表的自定义拼接,提升可视化布局自由度。