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

Author

221527105陈艺妍

1 案例数据

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

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

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

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

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

2 折线图和面积图

2.1 合并折线图

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

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

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

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

# A tibble: 148 × 3
   日期       名称     涨跌幅
   <date>     <chr>     <dbl>
 1 2024-09-02 中信证券  -1.92
 2 2024-09-03 中信证券   1.06
 3 2024-09-04 中信证券   0   
 4 2024-09-05 中信证券  -0.05
 5 2024-09-06 中信证券  -0.26
 6 2024-09-09 中信证券  -0.42
 7 2024-09-10 中信证券  -0.53
 8 2024-09-11 中信证券   0.64
 9 2024-09-12 中信证券  -0.63
10 2024-09-13 中信证券   0.21
# ℹ 138 more rows

2.2 分面折线图

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

  • 日期截取一整年;

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

2.3 面积图

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

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

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

  • 1.数据处理时不能乱套代码,要自己心中有数

  • 2.color = 名称,即按照名称来分类

  • 3.geom_tshighlight是标高光区域的函数

  • 4.在scale_x_date函数里,date_breaks是设置坐标轴刻度的

  • 5.要筛选日期,用<= & >=. 注意日期是字符串,要用双引号

  • 6.添加水平线,geom_hline,h是horizon。yintercept是设置y的截距。要设置线条类型用linetyoe这个参数

  • 7.color控制边缘的颜色,fill是填充颜色

3 流线图和地平线图

3.1 流线图

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

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

3.2 地平线图

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

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

  • 1.去掉y轴只需要在里面什么也不用写

  • 2.如果成交额太大,就需要调整倍数,使得图形具有可读性

  • 3.地平线图里可以更改比较的值,通过origin来控制。

  • 4.暖色系代表成交额比较低,冷色系代表成交额比较高。而在十月份里,这个成交额是最高的。

  • 不同的主题的布局是不一样的。用了当前的theme_few()主题后,图例就从图中变成图外了。注意这是个函数

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

  • 移动平均计算

    • rollmean(收盘, k=5):计算5日移动平均

    • fill=NA:窗口不足时用NA填充(如开头4天无法计算5日均线)

    • align="right":使用右对齐窗口(包含当前日及前4日)

  • 索引创建

    • date_index = 1:242:将日期转换为1-242的连续索引

    • 目的:解决交易日不连续问题(节假日休市),确保图表间距均匀

  • 分组处理

    • group_by(名称):按股票名称分组计算,确保每只股票独立计算指标
  • gather(收盘:ma20...):将收盘价和各均线从宽格式转为长格式。

  • facet_wrap(~名称,ncol=2):按股票分面显示,每行2列

  • scale="free":各子图Y轴独立缩放,突出个股波动特征

  • scale_x_continuous:自定义X轴

    • breaks:每30个索引显示一个刻度

    • labels:提取对应日期的真实日期,格式化为”月-日”

  • K线绘制原理

    • 影线geom_segment绘制垂直线段(Y=最低到Y=最高)

    • 实体geom_rect绘制矩形

      • xmin/xmax:控制K线宽度(索引±0.4)

      • ymin/ymaxpmin/pmax自动判断涨跌方向

      • fill=收盘>开盘:涨→红色,跌→绿色

  • 移动平均线

    • 三条独立geom_line分别绘制不同周期均线

    • 通过color参数指定图例标签(“MA5”等)

  • 坐标轴优化

    • breaks=seq(...,by=20):每20个交易日显示一个刻度

    • expand=c(0,0):消除轴两端空白

    • 标签日期格式化为”年-月-日”

  • 视觉优化

    • theme_minimal():简洁主题

    • legend.position="top":图例置于顶部

    • plot.margin=margin(b=0):底部无留白