第七章 时间序列可视化课堂练习
1 案例数据
1.1 all_stock_2024:工商银行、招商应用、中信证券和贵州茅台四个股票2024各天交易数据
data为为日期变量,但该日期变量不规则(不连续),周末和公众假期没有交易数据;编码和名称用于识别不同股票,注意不同股票有交易数据日期不一定一致,但本例种各股票均有242个交易日数据;开盘价到换手率均为数值变量,开盘价到成交量与每股资产有关,不同股票间不可比;交易量的单位为手(百股)、成交额的单位为元,振幅等四个变量均为相对指标。
2 折线图和面积图
2.1 合并折线图
将四只股票的
涨跌幅做作折线图,将四条折线在同一个图形输出;日期截取
2024-9-1到2024-10-31;添加一条纵轴为0的参考线,采用
twodash的线型;将图标题改为“合并涨跌幅折线图”。
2.2 分面折线图
将四只股票的
收盘价格做作折线图,将四条折线图分面输出;日期截取一整年;
并使用
ggpol::geom_tshighlight将2024-9-1到2024-10-31时间段高亮显示
2.3 面积图
将四只股票的
收盘价格做作面积图,将四个面积图分面输出;将成交量的单位改为万手
2.4 图形观察和代码编写的心得体会
合并涨跌幅折线图:
图形观察: 该图展示了不同股票在2024年9月至10月期间的涨跌幅变化趋势。 通过不同颜色区分各股票,便于对比它们的涨跌情况。 水平参考线(yintercept = 0)帮助直观判断涨跌分界点。
代码编写心得: 数据筛选:使用 filter() 限定日期范围,确保分析聚焦在目标时间段。 主题优化:通过 mytheme 自定义图例位置和背景,提升可读性。 可视化选择:折线图适合展示时间序列数据的趋势变化。
分面收盘价折线图:
图形观察: 每个股票单独展示,避免了多线条交叉导致的视觉混乱。 分面图的 scale=“free” 允许各图独立缩放Y轴,更清晰反映个股波动。 高亮区间突出显示目标时间段,增强重点信息的辨识度。
代码编写心得: 分面技巧:facet_wrap(~名称, ncol=2) 实现多图并排,适合对比分析。 日期格式化:scale_x_date 控制X轴标签的月份显示,简洁美观。 高亮区间:通过 geom_tshighlight 标记特定时间段,直观突出关键数据。
分面成交量面积图
图形观察:面积图(geom_area)直观展示成交量的累积效应,尤其适合高频数据。分面设计避免了个股成交量级差异导致的图形压缩问题。Y轴单位调整为“万手”(/10000),提升数据可读性。
代码编写心得:数据转换:成交量除以10000,简化Y轴标签,符合实际阅读习惯。视觉优化:移除次要网格线(panel.grid.minor)和图例,减少干扰。分面自由缩放:scale=“free” 确保各股票成交量细节清晰可见。
由上述三种图形我们可以看出工商银行、招商应用、中信证券和贵州茅台四个股票的涨跌幅、收益和成交量在9-11月之间都有较大的波动,而在这之外的时期变化幅度较小。这三种图都能很好的看出数据的变化情况,便于进行数据分析。合并折线图会比另外两种图更便于观察各股票之间同变量的变化情况。
3 流线图和地平线图
3.1 流线图
将四只股票的
成交额做作流线图。将交易额的单位改为亿元
3.2 地平线图
- 采用
ggHoriPlot::geom_horizon函数,对四只股票的成交额做作地平线图 - 设置原点为均值
origin='mean',输出配色图例
3.3 图形观察和代码编写的心得体会
成交额流线图将各股票成交额的数据变化重叠在一起,能更加直观的对比各股票间成交额的差异。
图形观察:流线图展示了不同股票成交额随时间的变化趋势,通过堆叠的流线形态直观反映成交额的分布和波动。 Y轴单位:成交额以“亿元”为单位(/100000000),便于阅读。 颜色区分:不同股票用不同颜色填充,图例置于底部(legend.position=“bottom”),避免遮挡图形。 平滑度:bw = 0.3 控制流线的平滑程度,值越小线条越尖锐,反之越平滑。
代码编写心得:数据转换:成交额除以 100000000 转换为“亿元”,符合金融数据常用单位。 流线图优势:适合展示多类别时间序列数据的整体分布,比传统面积图更具视觉吸引力。 图例优化:guides(fill=guide_legend(nrow=2)) 将图例分两行排列,避免过长图例占用空间。 标题与标签:通过 ylab() 和 ggtitle() 明确标注单位和图表主题。
成交额地平线图将各股票之间的成交额的数据竖着进行对比,同时用颜色体现分类,更加便于观察成交额变化的情况。
图形观察:地平线图 将时间序列数据分层压缩,适合高密度数据对比: 原点:以均值(origin=‘mean’)为基准,颜色区分高于/低于均值的部分。 分层切割:horizonscale=10 将数据分为10个区间,颜色深浅表示数值大小。 分面设计:facet_grid(名称~.) 纵向分面,便于逐个股票对比。 配色:scale_fill_hcl(palette=‘RdYlBu’) 使用红-黄-蓝渐变色,增强视觉区分度。
代码编写心得:数据压缩:地平线图通过分层和折叠,高效展示高密度时间序列,避免传统折线图的重叠问题。 分面与配色: facet_grid(名称~.) 纵向排列,适合股票名称较长的情况。 reverse=F 保持颜色顺序(红→蓝表示低→高)。 主题简洁: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 图形观察和代码编写的心得体会
平滑曲线图:
图形观察:分面展示:使用 facet_wrap(~名称, ncol=2) 将不同股票的收盘价及移动平均线(MA5、MA10、MA20)分开展示,避免线条重叠。 时间轴优化:X轴标签通过 seq(1,242,by=30) 每隔30天显示一次,格式化为“月-日”(%m-%d),避免标签拥挤。 颜色区分:收盘价、MA5、MA10、MA20 分别用不同颜色表示,但因 guides(color=“none”) 未显示图例,需依赖标题或注释说明。
代码编写心得:数据转换: 使用 rollmean() 计算移动平均线(MA),align=“right” 表示右对齐(即包含当前日期的前N天均值)。 gather() 将“收盘”“MA5”“MA10”“MA20”从宽数据转为长数据,便于用 color=指标 统一绘制。 分面自由缩放:scale=“free” 允许各股票独立调整Y轴刻度,避免因股价差异导致图形压缩。 简化图例:由于分面图中每条线含义一致,隐藏图例(guides(color=“none”))以节省空间。
K线图
图形观察线段:表示每:日股价波动范围(最低价到最高价)。 矩形:表示开盘价与收盘价区间,红色(涨)或绿色(跌)填充。 移动平均线:叠加MA5(蓝)、MA10(橙)、MA20(紫)三条均线,反映趋势。 时间轴:X轴标签间隔30天,格式简洁。 图例优化:均线图例置于顶部(legend.position=“top”),K线颜色图例隐藏(guides(fill=“none”))。
代码编写:心得 K线绘制逻辑: 最高/最低价用线段(geom_segment),开盘/收盘价用矩形(geom_rect),通过 fill = 收盘 > 开盘 自动区分涨跌。 xmin = date_index - 0.4 和 xmax = date_index + 0.4 控制矩形宽度,避免重叠。 均线叠加:三条均线用不同颜色和标签区分,scale_color_manual 自定义颜色。 主题简洁:theme_minimal() 去除冗余背景,突出数据。