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

Author

221527101关子桃

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 时间段高亮显示

mapping: xmin = ~as.Date("01/09/2024", format = "%d/%m/%Y"), xmax = ~as.Date("31/10/2024", format = "%d/%m/%Y") 
geom_rect: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

2.3 面积图

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

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

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

2.5 (合并折线图)

2.5.1 图形观察

  1. 数据聚焦:成功展示2024年9月1日至10月31日四只股票的涨跌幅对比
  2. 参考线:y=0的twodash型参考线清晰区分涨跌区域
  3. 图例设计:位于图表内部(0.1,0.8)位置,背景透明,不遮挡数据
  4. 时间标记:x轴自动生成关键日期标签(9月01、9月15等)

2.6 (分面折线图)

2.6.1 图形观察

  1. 分面策略:四只股票收盘价分面展示,ncol=2布局合理
  2. 日期处理:每月一个刻度(%b格式),标签旋转90度防重叠
  3. 高亮区间:9-10月用半透明蓝色背景突出显示
  4. 视觉优化:移除次要网格线,减少视觉干扰

2.7 (分面面积图)

2.7.1 图形观察

  1. 单位转换:成交量以”万手”为单位更符合阅读习惯
  2. 面积图优势:直观展示成交量累积效应
  3. 分面设计:各股票独立y轴尺度,避免小成交量被压制
  4. 标签处理:x轴标签旋转和间隔设置避免重叠

2.8 综合心得

  1. 数据过滤技巧

    filter(日期 >= "2024-9-1" & 日期 <= "2024-10-31")

    日期比较需确保格式一致,字符型日期也可直接比较

  2. 参考线应用

    geom_hline(yintercept=0, linetype="twodash")

    关键参考线能极大增强图表解读性

  3. 分面图最佳实践

    • scale="free"解决量纲差异问题
    • ncol=2平衡空间利用率与可读性
    • 共享x轴保持时间对齐
  4. 主题优化经验

    • 旋转标签时需同步调整hjust/vjust
    • element_blank()是简化视觉元素的利器
    • 图例位置需权衡数据遮挡与阅读流畅性
  5. 创新可视化

    • geom_tshighlight实现区间高亮
    • 面积图对累积量展示效果突出

这些案例展示了如何针对不同分析目的(趋势对比、区间分析、累积量观察)选择最合适的图表类型,并通过ggplot2的丰富功能实现专业级的可视化效果。

3 流线图和地平线图

3.1 流线图

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

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

3.2 地平线图

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

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

3.4 (流线图)

3.4.1 图形观察

  1. 数据展示:成功将四只股票(工商银行、贵州茅台、招商银行、中信证券)的成交额以流线图形式展示,单位转换为亿元
  2. 时间跨度:展示了2024年1月至2025年1月的完整年度数据
  3. 视觉特征
    • 流线图呈现波浪状形态,直观反映成交额波动
    • 负值区域可能代表数据异常或特殊计算方式
    • 颜色区分清晰,图例位于底部

3.5 (地平线图)

3.5.1 图形观察

  1. 新颖可视化:采用地平线图形式,通过颜色深浅和高度双重编码成交额
  2. 时间精度:按月显示,适合观察长期趋势
  3. 警告信息:提示ggplot2 3.4.0版本后size参数已弃用,应改用linewidth

3.5.2 代码编写心得

  1. 版本兼容性
    • 需要注意ggplot2版本更新带来的语法变化
    • 新代码应使用linewidth替代size
  2. 可视化选择
    • 地平线图适合展示多组时间序列的对比
    • 通过色带增强数据差异的可视化
  3. 优化方向
    • 可添加参考线或标记特殊事件点
    • 考虑交互式实现以解决重叠问题

3.6 综合心得

  1. 创新可视化:流线图和地平线图都是传统折线图之外的有趣选择,能提供新的数据洞察视角

  2. 数据处理

    • 单位转换(亿元)增强了数据可读性
    • 日期处理需要特别注意格式一致性
  3. 美学设计

    • 颜色方案选择影响多序列区分度
    • 图例排版需要考虑系列数量和显示空间
  4. 调试经验

    • 警告信息往往提示重要问题,不应忽视
    • 数据范围异常(如负成交额)需要特别检查

这些可视化展示了R在金融数据可视化方面的强大能力,特别是ggplot2生态系统配合扩展包(如ggstream)可以实现多种创新图表形式。

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

4.5 (分面折线图)

  1. 分面展示效果:成功将四只股票(工商银行、招商银行、贵州茅台、中信证券)的收盘价和移动平均线(MA5、MA10、MA20)分别展示在四个子图中,每个子图有自己的y轴刻度范围。

  2. 日期格式处理:x轴刻度每30天一个,格式化为”月-日”,清晰展示了时间趋势。

  3. 警告信息:有32行数据因缺失值或超出范围被移除,这是计算移动平均时常见的现象(前几日无法计算较长周期的移动平均)。

4.6 (K线图)

  1. 单只股票展示:专注于工商银行的K线图和移动平均线。

  2. 日期格式:使用了完整的”年-月-日”格式。

  3. 警告信息:不同移动平均线有不同数量的缺失值被移除(MA5:4行,MA10:9行,MA20:19行),这与移动平均的计算周期有关。

4.7 代码编写心得

  1. 数据整理技巧
    • 使用gather()将收盘价和各移动平均线从宽格式转为长格式,便于ggplot绘制
    • 使用select()精心选择需要的列
  2. 可视化技巧
    • facet_wrap()实现了分面展示,scale="free"让每个子图有独立的y轴范围
    • scale_x_continuous()配合breakslabels参数精细控制x轴刻度
    • guides(color="none")移除了不必要的图例
  3. 注意事项
    • 移动平均线计算会产生前N-1个NA值(N为窗口大小)
    • 日期格式化需要考虑显示空间和可读性
    • 分面图要注意各子图之间尺度是否可比
  4. 改进空间
    • 可以添加标题和轴标签增强可读性
    • 考虑添加交易量作为副图
    • 可以尝试用cowplotpatchwork包更灵活地组合图表

这些图表很好地展示了如何使用R和ggplot2进行金融时间序列数据的可视化,特别是在处理多股票比较和移动平均线分析方面提供了很好的范例。