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

Author

221527136邹伟亮

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. 合并折线图(涨跌幅)

    • 通过设置多支股票的涨跌幅合并于一张图中,便于横向比较不同股票在同一时间段内的波动情况。

    • 添加基准线(0涨跌幅)直观区分了上涨和下跌的走势,有助于快速定位关键波动区间。

    分面折线图(收盘价)

    • 使用facet_wrap实现按股票名称分面,展示每支股票在全年内的收盘价走势。

    • 设置X轴按月份分隔、标签旋转,有效提升了图形的可读性,便于发现趋势和异常波动。

    • 特别添加时间窗口高亮(如2024年9月~10月),进一步强化了重点时间段的视觉聚焦。

    面积图(成交量)

    • 采用面积图展示成交量数据,能够更直观表现出各股票在一年内市场活跃程度的变化。

    • 通过fill=名称和分面展示,使得各支股票的交易活跃程度对比更加清晰。

2.4.0.2 二、代码编写心得

  1. 灵活使用dplyr进行数据筛选与整理

    • 使用select()filter()配合日期条件精准提取分析所需的字段与时间段,提高了代码的可维护性和通用性。

    ggplot2图层叠加思想清晰

    • 各图形通过逐步添加geom_line()geom_area()geom_hline()等图层构建,配合主题设置(如theme()和自定义图例位置)形成清晰美观的图表。

    格式标准化处理

    • 日期格式统一处理、坐标轴标签优化、图例移除/调整等细节优化,使图形更加专业,具备较强的展示和汇报价值。

3 流线图和地平线图

3.1 流线图

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

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

3.2 地平线图

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

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

  • 一、图形观察心得

    流线图(Stream Graph)

    利用ggstream绘制的图形呈现出一种类似“河流”的走势,可以同时展示多个类别(四只股票)随时间变化的成交额体量。

    色块面积表示成交额规模,直观表达了个股在各时间段内的市场参与度。

    图形具有较强的艺术感和视觉吸引力,适合用于呈现宏观走势和交替趋势。

    地平线图(Horizon Plot)

    借助ggHoriPlot对成交额数据按平均值为中心进行切割和分层填色,使得时间序列的微小波动得以放大显示。

    使用facet_grid分面后,每只股票的走势变化更为清晰,适合对比它们的活跃区间。

    颜色越深代表成交额越远离平均值,有助于迅速定位高峰与低谷。

    二、代码编写心得

    ggstream绘图技巧

    geom_stream()通过group=名称, fill=名称绑定类别变量,简化多时间序列的对比。

    合理设置参数如bw=0.3能有效平滑走势,图例优化使得整体布局更整洁美观。

    ggHoriPlot中的细节处理

    设置origin=“mean”和horizonscale=10合理划分色带,展示数据的偏离程度。

    搭配scale_fill_hcl设定调色板,使图形色彩更易区分。

    使用facet_grid分面展示每个股票的细节,便于个别分析。

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

  • 一、图形观察心得

    平滑曲线图(含MA5/10/20)

    将原始收盘价与3条移动平均线(MA5、MA10、MA20)合并绘制,可以直观比较短期与中长期趋势之间的差异。

    分面展示使每支股票的走势更加清晰,色彩区分了不同的指标线,方便趋势追踪。

    设置X轴显示格式为每30日一个刻度,并使用日期格式%m-%d提升了时间可读性。

    K线图(以工商银行为例)

    利用geom_segment和geom_rect还原了经典蜡烛图形态,直观展现每个交易日的开盘、收盘、最高与最低价。

    颜色填充表示涨跌(红涨绿跌),有助于快速识别连续上涨或下跌的区间。

    叠加三条均线(MA5、MA10、MA20)提供更丰富的技术分析视角,用以判断趋势反转或支撑阻力。

    二、代码编写心得

    数据转换与整合

    在平滑图中通过gather()函数将收盘与三条均线整合为“长格式”数据,便于ggplot绘图。

    通过facet_wrap(~名称)轻松实现多股分面展示,scale=“free”参数确保每支股票使用自身的Y轴刻度,避免数据对比失真。

    K线图构造技巧

    精准使用pmin()和pmax()处理开收盘的上下边界,使K线图准确反映价格区间。

    scale_fill_manual 和 scale_color_manual 分别用于蜡烛图颜色和均线颜色自定义,提高图表表达力。

    用 date_index 替代 日期,并统一设置X轴刻度,有效控制图形密度,防止日期标签重叠。