基于大秦铁路在2025年度跌跌不休,于是用AKshare数据库采集到股票90天的收盘价与平均成本数据,利用python绘制对比分析图。便于分析者从趋势形态、成本偏离、套牢压力、技术形态四个维度进行专业投资评价。分析图如下:
在财务数据分析中,仅展示两条曲线的走势往往不够直观。通过填充曲线之间的区域形成半透明阴影,可以清晰标注"盈利区间"与"亏损区间",让数据对比一目了然。本文将以股票收盘价与平均成本的对比为例,详解如何使用 Matplotlib 的“fill_between()”方法绘制带有条件阴影的专业图表。初学者可以结合《财务大数据分析(基于python)》教材阅读。
一、核心技术:“fill_between()”的条件填充
代码的核心在于利用“plt.fill_between()”根据条件判断填充两条曲线间的区域:
# 当收盘价高于平均成本时,填充蓝色阴影(盈利区间)plt.fill_between(x, y1, y2,where=(y1 >= y2),color='#1f77b4', alpha=0.15, label='盈利区间')# 当收盘价低于平均成本时,填充橙色阴影(亏损区间)plt.fill_between(x, y1, y2,where=(y1 < y2),color='#ff7f0e', alpha=0.15, label='亏损区间')
关键参数解析:
“x”:横轴数据(日期序列)
“y1, y2”:两条曲线的纵轴数据(y1收盘价与y2平均成本),填充区域介于二者之间;
“where”:布尔条件数组,决定哪些区域被填充。代码中通过“y1 >= y2”和“y1 < y2”区分盈利与亏损状态;
“alpha=0.15”:透明度设置(0-1),确保阴影不会遮挡底层曲线,同时保持视觉层次感;
“color”:填充色,建议与对应曲线的颜色保持一致,增强视觉关联性
二、完整绘图流程拆解
1. 画布与数据准备
首先设置画布尺寸并提取绘图所需字段。“figsize=(10, 5)”提供了横向展示时间序列的合适比例:
plt.figure(figsize=(10, 5))x = df_common['日期']y1 = df_common['收盘'] # 第一条曲线y2 = df_common['平均成本'] # 第二条曲线
2. 绘制基础曲线
先绘制两条主线,“lw=2”设置线宽确保主体突出,建议使用对比色区分(如蓝色 vs 橙色):
plt.plot(x, y1, label='收盘价', color='#1f77b4', lw=2)plt.plot(x, y2, label='平均成本', color='#ff7f0e', lw=2)
3. 添加阴影区域
执行顺序很重要:先画线、再填充。这样可以确保曲线位于阴影上层,避免被半透明色覆盖。填充时通过“where”参数实现“条件分区着色”——这是本图的专业之处。不同于单一颜色填充,条件填充能直观展示数据间的"优劣关系"。
4. 美化与输出
日期倾斜:“plt.xticks(rotation=45)”防止日期标签重叠,是时间序列图的标准做法
图例设置:“frameon=True”为图例添加边框,提升可读性
紧凑布局:“plt.tight_layout()” 自动调整边距,避免标签被截断
高清保存:“dpi=300”确保图片分辨率满足报告或论文要求
三、学习建议与扩展应用
单侧填充:
若只需标记"超过警戒线"的区域,可将`y2`设为固定阈值(如`y2=0`或`y2=目标值`)
渐变效果:
结合`alpha`数组可实现渐变阴影(如越远离基准线颜色越深)
多区间填充:
可同时使用多个`fill_between` 叠加不同条件的区域(如"轻度亏损"、"重度亏损")
此方法适用于任何需要展示"两条曲线差异区间"的场景:
fill_between()是 Matplotlib 中实现"阴影可视化"的利器。通过条件判断“where”参数,可以让图表自动识别并高亮关键区域,将枯燥的数值对比转化为直观的视觉语言。掌握这一技巧后,财务分析图表将具备专业报告级的信息密度与视觉表现力。