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

Author

221527213余语彤

1 案例数据

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

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

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

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

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

2 折线图和面积图

2.1 合并折线图

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

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

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

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

List of 4
 $ legend.background     : list()
  ..- attr(*, "class")= chr [1:2] "element_blank" "element"
 $ legend.position       : chr "inside"
 $ legend.position.inside: num [1:2] 0.1 0.8
 $ title                 : chr "合并涨跌幅折线图"
 - attr(*, "class")= chr [1:2] "theme" "gg"
 - attr(*, "complete")= logi FALSE
 - attr(*, "validate")= logi TRUE

2.2 分面折线图

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

  • 日期截取一整年;

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

2.3 分面面积图

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

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

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

(1) 合并涨跌幅折线图

  • 选取了 2024年9月1日至10月31日 的股票涨跌幅数据。折线图(geom_line)能直观反映股票价格的 短期波动,例如:中信证券(600030)在 9月24日-27日 出现 大幅上涨(7.82%、3.6%),随后在 10月9日剧烈震荡(振幅13.77%)。贵州茅台(600519)同期表现 相对平稳,但 10月8日 出现 10%涨停(数据中 涨跌幅=10)。

  • geom_hline(yintercept=0) 添加 零基准线,方便判断涨跌方向。

(2) 分面收盘价折线图

  • 使用全部日期的 收盘价。分面图(facet_wrap)适合对比 不同股票的独立趋势,例如:工商银行(601398)股价 长期稳定(4.78~6.92元),而贵州茅台(600519)波动剧烈(1414~1777元)。scale="free" 让每个子图的Y轴刻度独立,避免低价股(如工商银行)被高价股(如茅台)压缩显示。

  • geom_tshighlight 高亮 9-10月区间,突出该时段的市场表现(如国庆节前后行情)。

(3) 分面成交量面积图

  • 使用全部日期的 成交量(单位转换为万手)。面积图(geom_area)强调 成交量的累积效应,例如:中信证券在 9月24日-26日 成交量激增(峰值2869万手),对应股价大涨,显示资金涌入。贵州茅台在 10月8日 成交量骤增(1475万手),与涨停行情匹配。

  • ylab("成交量-万手") 明确单位,避免误解。分面后仍保留独立Y轴,确保不同量级的股票成交量可比。

3 流线图和地平线图

3.1 流线图

  • 将四只股票的成交额 做作流线图;

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

3.2 地平线图

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

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

1. 流线图(Stream Plot)分析

  • 选取了 日期、股票名称、成交额,并将成交额单位转换为 亿元/1e8)。geom_stream() 绘制 流线图,展示不同股票成交额的 相对占比和趋势变化bw = 0.3 控制平滑度,值越小曲线越尖锐,反之越平滑。适用观察市场资金流动,比如:中信证券(600030)9月24日-27日 成交额激增(对应股价大涨),流线宽度明显扩张。贵州茅台(600519) 成交额整体平稳,但 10月8日 出现峰值(涨停日)。

2. 地平线图(Horizon Plot)分析

  • 同样使用 成交额,但未做单位转换(因 geom_horizon 自动分层)。geom_horizon() 将数据 按均值(origin=‘mean’)分层,每层代表一定数值范围(horizonscale=10)。facet_grid(名称~.) 纵向分面,适合对比多股票的 极端波动配色scale_fill_hcl(palette='RdYlBu') 使用红-黄-蓝渐变,暖色(红)表示 高于均值,冷色(蓝)表示 低于均值

  • 适用识别 成交额异常波动,例如:工商银行(601398)8月30日 出现深红色带,对应成交额骤增(股价跳空下跌)。招商银行(600036)5月16日 的亮黄色带,反映短期资金涌入。

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

(1) 平滑曲线图

  • gather(收盘:ma20, key=指标, value=指标值)收盘价、MA5、MA10、MA20 转换为长格式,便于分面绘制。date_index 是日期序号(1~242),用于简化X轴刻度。

  • 图形特点分面展示facet_wrap(~名称))对比不同股票的 收盘价与均线趋势X轴优化scale_x_continuous 将序号转换为日期标签(如 "01-02"),避免重叠。隐藏图例guides(color="none") 因分面后颜色意义明确(如蓝线=收盘价)。快速对比多只股票的 技术指标一致性(如均线是否支撑股价)。

(2) K线图

  • 仅分析 工商银行(601398),包含开盘、收盘、最高、最低价及均线(MA5/10/20)。图形组成蜡烛实体geom_rect 用红(涨)/绿(跌)色矩形表示 开盘-收盘价区间上下影线geom_segment 绘制 最高-最低价 的垂直线。均线叠加geom_line 分别绘制MA5(蓝)、MA10(橙)、MA20(紫)。

  • X轴标签:每20天显示一个日期(seq(1, 242, by=20)),避免拥挤。均线图例置于顶部(legend.position="top"),隐藏蜡烛图例(guides(fill="none"))。