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

Author

221527218吴烁婷

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 图形观察和代码编写的心得体会

  • 从分面折线图可以观察到,这工商银行、贵州茅台和招商银行这三支股票在九月到十月总体呈先下降再上升再下降的趋势;从面积图可以观察到,中信证券的成交量比其他三个稳定。

  • 代码编写的心得体会:

    geom_tshighlight()
    是一个自定义的几何对象(类似 ggplot2 中的 geom_rectgeom_ribbon),专用于时间序列数据的高亮显示。它的作用是在图形中添加一个半透明的矩形区域,突出显示指定的时间范围。

    aes(xmin, xmax)
    通过美学映射(aes)指定高亮区域的起止日期:

    • xmin: 高亮开始日期(2024年9月1日)。

    • xmax: 高亮结束日期(2024年10月31日)。

    • 日期通过 as.Date() 解析,格式为 日/月/年format = "%d/%m/%Y")。

3 流线图和地平线图

3.1 流线图

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

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

3.2 地平线图

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

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

  • 观察成交额流线图,中信证券的成交额在10月份前后相对其他三支股票的明显呈下降趋势,工商银行和贵州茅台的成交额在10月份前后上次速度较快。

    观察成交额地平线图,工商银行、贵州茅台、招商银行的股票成交额在十月份呈红色,说明成交额达到一年中达到最大。

  • 代码编写心得体会:geom_horizon(origin=‘mean’,horizonscale=10,show.legend=TRUE,legend.position = “right” )

    将数据相对于均值(origin)的波动分层显示,正负值用不同颜色区分。

    horizonscale = 10:将数据范围划分为10个色带,增强对比度。

    图例显示颜色与数值的对应关系。

    scale_fill_hcl(palette=‘RdYlBu’,reverse=F)

    红色表示低值,蓝色表示高值(相对于均值)。

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

  • 平滑曲线主要用于提取趋势,通过算法(如移动平均)去除数据噪声,突出长期趋势。观察工商银行的平滑曲线,可以看出这支股票收盘价总体呈上升趋势,但在八月中旬到九月中旬出现了大幅的下降,而后又呈波动上升趋势。贵州茅台股票收盘价从五月份开始呈下降趋势,直到九月底跌停,而后大幅度上涨,十月初涨停,接着下降,到十月中旬之后趋于稳定。中信证券一月到九月底的涨跌幅度较平缓,十月到十一月中旬大幅上升,而后趋于平缓。

    K线图主要用于多维度展示价格波动,单根K线包含 开盘价、收盘价、最高价、最低价。通过颜色(红跌绿涨)直观显示涨跌。由工商银行K线图可以看出,其绿色范围广,所以该股票价格主要呈上涨。

  • 代码编写的心得体会:

    geom_rect(aes(xmin = date_index - 0.4, xmax = date_index + 0.4, ymin = pmin(开盘, 收盘), ymax = pmax(开盘, 收盘), fill = 开盘 > 收盘)) + scale_fill_manual(values = c(“TRUE” = “red”, “FALSE” = “green”))

    这句代码是用矩形表示每日的 开盘价和收盘价红色:开盘价 > 收盘价(下跌);绿色:开盘价 < 收盘价(上涨)。

    geom_line,用这个函数绘制日均线,分别是ma5(蓝色):5日均线(短期趋势),ma10(橙色):10日均线(中期趋势),ma20(紫色):20日均线(长期趋势)。

    scale_x_continuous(breaks = seq(1, nrow(df2), by = 20), labels = format(df2$日期[seq(1, nrow(df2), by = 20)], “%m-%d”))这段代码可以用于自定义X轴(横轴)的刻度位置和标签,主要功能是为时间序列数据(如股票K线图)设置清晰可读的日期标记。

    breaks 参数:控制刻度位置 seq(1, nrow(df2), by = 20) 生成一个从1到数据总行数(nrow(df2))的序列,步长为20。作用:每隔20天在X轴上显示一个刻度(避免标签拥挤)

    labels 参数:控制刻度标签 df2$日期[seq(1, nrow(df2), by = 20)] 从 日期列中提取对应刻度位置的日期值(每隔20天的日期)。format(…, “%m-%d”) 将日期格式化为 月-日(如 06-15 表示6月15日),隐藏年份以简化显示。