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

Author

221527208郑舒蕾

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. 涨跌幅折线图: - 清晰地展示了2024年9月至10月期间不同股票/基金的涨跌趋势 - 零线(geom_hline)的添加使得涨跌情况一目了然 - 图例位置设置在图内(0.1,0.8)既节省空间又不遮挡数据 2. 收盘价分面折线图: - 采用分面(facet_wrap)展示不同股票/基金的收盘价,避免了单一图表中的线条重叠 - 自由刻度(scale=“free”)让每个子图都能充分展示自身数据特征 - 高亮区域(geom_tshighlight)突出显示了特定时间段(2024年9-10月),便于重点观察 3. 成交量面积图: - 面积图(geom_area)直观地表现了成交量的变化和累积效果 - y轴单位转换为”万手”使数据更易读 - 分面展示同样避免了不同股票/基金成交量差异过大导致的图表失衡

  • 代码编写心得 1. 数据处理: - 使用管道操作符(|>)使代码更加清晰流畅 - select和filter的组合实现了数据的精确筛选 - 日期范围的过滤条件简洁明了 2. 主题定制: - 创建mytheme对象实现了主题样式的复用 - 通过theme()函数精细控制图例位置、背景等细节 - 网格线、坐标轴标签的调整提升了图表可读性 3. 可视化技巧: - 使用geom_line、geom_area等不同几何对象满足不同展示需求 - scale_x_date控制日期显示格式和间隔,使x轴更专业 - facet_wrap实现多图分面展示,scale=“free”保证各子图独立性 - geom_tshighlight添加高亮区域,突出重点时间段 4. 代码组织: - 逻辑清晰,从数据准备到图形绘制步骤分明 - 注释得当,关键步骤都有说明 - 参数设置合理,如图例位置、线条粗细等

3 流线图和地平线图

3.1 流线图

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

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

3.2 地平线图

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

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

  • 图形观察 1. 成交额流线图(ggstream) 视觉表现:流线图通过流畅的曲线和填充色直观展示了不同股票/基金成交额的动态变化和相对比例 时间趋势:能够清晰观察到2024年全年成交额的波动情况,高峰和低谷区域一目了然 对比效果:不同颜色的流线相互堆叠,便于比较各品种在市场中的活跃度差异 图例优化:底部水平排列的图例(nrow=1)节省了垂直空间,使图表主体更突出 2. 成交额地平线图(ggHoriPlot) 创新视角:将时间序列数据转化为水平带状显示,通过颜色深浅和宽度变化反映数据波动 异常检测:基于均值(origin=‘mean’)的切割方式,快速识别异常交易时段 多品种对比:垂直分面(facet_grid)排列使不同品种的成交额模式对比更加直观 色彩编码:RdYlBu调色板(红-黄-蓝)的使用增强了数据差异的视觉辨识度 空间效率:地平线图以紧凑的形式呈现了大量信息,特别适合长期趋势分析

  • 代码编写进阶心得 1. 高级可视化技术: - 成功应用了流线图(geom_stream)和地平线图(geom_horizon)等非传统图表类型 - 通过bw参数调整流线图的平滑度(带宽=0.3),找到数据呈现的最佳平衡点 - 地平图horizonscale参数的设置实现了数据分布的合理分段 2. 美学控制: - 使用scale_fill_hcl自定义填充色板,确保颜色方案符合数据特性 - reverse参数控制颜色渐变方向,保持与常规认知一致(如红色通常表示高值) - 通过guides函数精细控制图例的排列方式和标题显示 3. 时间序列处理: - scale_x_date的灵活应用统一了不同图表的时间轴格式 - expand参数控制坐标轴扩展范围,避免图表边缘数据被截断 - 月粒度(date_breaks=“1 month”)的标签设置保证了时间维度的可读性 4. 主题一致性: - 复用之前定义的mytheme保持整体风格统一 - 采用theme_few等专业主题快速提升图表专业度 - 通过facet_grid实现纵向排列,优化多品种数据的比较分析 5. 用户体验优化: - 添加明确的y轴标签(“成交额(亿元)”)和标题增强图表自解释性 - 合理处理图例位置(底部)避免遮挡关键数据区域 - 在保持信息量的同时追求图表的简洁性(如show.legend=FALSE)

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

  • 图形观察 1. 多品种移动平均线分面图 趋势对比:通过 facet_wrap 分面展示不同股票/基金的收盘价、5日均线(MA5)、10日均线(MA10)、20日均线(MA20),便于横向比较不同品种的趋势强弱。
    均线交叉分析:MA5(短期均线)与MA10、MA20(中长期均线)的交叉点可识别买入/卖出信号(如金叉、死叉)。
    时间轴优化:scale_x_continuous 自定义刻度标签("%m-%d"),使日期显示更紧凑清晰。

    1. 工商银行K线图(蜡烛图) 价格波动范围:
    • geom_segment 绘制上下影线(最低价↔︎最高价),直观显示每日价格波动幅度。
    • geom_rect 绘制蜡烛实体(开盘价↔︎收盘价),红色表示上涨(收盘>开盘),绿色表示下跌(收盘<开盘)。
      均线叠加:MA5(蓝)、MA10(橙)、MA20(紫)三条均线叠加在K线上,辅助判断趋势:
      短期趋势(MA5):波动剧烈,反映近期价格变化。
      中长期趋势(MA10/MA20)
      :平滑曲线,揭示市场整体方向。
      视觉优化:
      图例置于顶部(legend.position = "top"),避免遮挡数据。
      隐藏X轴标签(axis.text.x = element_blank()),保持图表简洁。
  • 代码编写心得 1. 数据处理技巧 滚动计算均线:
    使用 zoo::rollmean 计算移动平均,align = "right" 确保当前点包含最近5/10/20日数据。
    fill = NA 避免前几日无均线数据时出现错误值。
    数据重塑(gather)**:
    gather(收盘:ma20, key = 指标, value = 指标值) 将收盘价和均线数据从宽格式转为长格式,便于 ggplot 统一绘制多条折线。

    1. 可视化优化技巧**
      K线图绘制逻辑:
      影线:geom_segment 绘制垂直线(最低↔︎最高)。
      蜡烛实体:geom_rect 用矩形表示开盘-收盘区间,fill 颜色区分涨跌。
      均线叠加:geom_line 分别绘制三条均线,并用 scale_color_manual 自定义颜色。