Python 量化数据可视化
Python 量化数据可视化主要使用 Matplotlib 和 Seaborn 两个库。
安装可以在终端或命令提示符中运行:
pip install matplotlib seaborn
Matplotlib 的系统用法可以参考:Matplotlib 教程。
本篇重点介绍 Seaborn 在量化数据分析中的应用。
Seaborn 库
Seaborn 是一个基于 Matplotlib 的数据可视化库,专注于统计图形的绘制。
它在 Matplotlib 之上提供了更高层次的接口和更美观的默认主题,用更少的代码画出更好看的统计图表。
快速绘制统计图形
Seaborn 内置了一批经典数据集,配合内置绘图函数,一行代码就能画出统计图形:
实例
import matplotlib.pyplot as plt
# 加载内置的 tips 数据集(餐厅小费数据)
tips = sns.load_dataset("tips")
# 绘制消费金额与小费的散点图,按用餐时间着色
sns.scatterplot(x="total_bill", y="tip", hue="time", data=tips)
plt.title("Total Bill vs Tip")
plt.show()
函数名即图形类型:scatterplot 散点图、lineplot 折线图、barplot 柱状图、histplot 直方图,对初学者非常友好。
主题与样式
Seaborn 提供内置主题,一行代码改变图表外观:
实例
# 使用白色网格主题,还有 darkgrid、white、dark、ticks 可选
sns.set(style="whitegrid")
分类数据的可视化
对于带分类维度的数据,Seaborn 可以轻松创建分组柱状图、箱线图等:
实例
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# 按星期分组绘制消费金额柱状图,hue 参数按性别再分一组
sns.barplot(x="day", y="total_bill", hue="sex", data=tips)
plt.title("Average Bill by Day and Gender")
plt.show()
矩阵数据的可视化
Seaborn 提供专门可视化矩阵数据的函数,最常用的是热力图(heatmap),量化中常用来展示相关性矩阵:
实例
import seaborn as sns
import matplotlib.pyplot as plt
# 生成一个 5x5 的随机矩阵
matrix = np.random.rand(5, 5)
# 绘制热力图,annot=True 在格子里显示数值
sns.heatmap(matrix, annot=True, cmap="coolwarm")
plt.show()
分面绘图
分面绘图可以根据数据的子集创建多个小图,全面展示数据在不同维度下的表现:
实例
tips = sns.load_dataset("tips")
# col="time" 按用餐时间拆成左右两张子图
sns.relplot(x="total_bill", y="tip", hue="day", col="time", data=tips)
量化实例:股价走势图
进入量化场景,结合 yfinance 获取贵州茅台(600519.SS)的股票数据,然后用 Seaborn 绘制收盘价走势图:
实例
import seaborn as sns
import matplotlib.pyplot as plt
# 获取贵州茅台的股票数据
maotai_data = yf.download("600519.SS", start="2020-01-01", end="2023-01-01",
progress=False, multi_level_index=False)
# 选取收盘价数据
closing_prices = maotai_data["Close"]
# 使用 seaborn 绘制走势图
plt.figure(figsize=(12, 6))
sns.lineplot(x=closing_prices.index, y=closing_prices.values,
label="Maotai Closing Prices")
plt.title("Maotai Stock Closing Prices Over Time")
plt.xlabel("Date")
plt.ylabel("Closing Price (CNY)")
plt.legend()
plt.show()
执行以上代码,输出结果为:

相比直接用 Matplotlib,Seaborn 的默认配色与网格让图表质感明显更好,且代码量几乎相同。
量化实例:多股票相关性热力图
相关性分析是组合研究的起点:如果两只股票涨跌高度同步,同时持有它们起不到分散风险的作用。
下面的实例计算白酒板块三只龙头股(贵州茅台、五粮液、泸州老窖)日收益率之间的相关性,并用热力图展示:
实例
import seaborn as sns
import matplotlib.pyplot as plt
# 三只白酒龙头股:贵州茅台、五粮液、泸州老窖
symbols = ["600519.SS", "000858.SZ", "000568.SZ"]
# 下载 2023 年全年收盘价
close = yf.download(symbols, start="2023-01-01", end="2023-12-31",
progress=False, multi_level_index=False)["Close"]
# 计算日收益率,再计算相关性矩阵
corr = close.pct_change().corr()
print(corr.round(3))
# 绘制相关性热力图
plt.figure(figsize=(8, 6))
sns.heatmap(corr, annot=True, cmap="coolwarm", vmin=-1, vmax=1, square=True)
plt.title("Correlation of Daily Returns (Baijiu Stocks 2023)")
plt.show()
先看输出的相关性矩阵:
Ticker 000568.SZ 000858.SZ 600519.SS Ticker 000568.SZ 1.000 0.842 0.773 000858.SZ 0.842 1.000 0.770 600519.SS 0.773 0.770 1.000
三只股票两两相关性在 0.77 到 0.84 之间,属于高度相关。
这说明同行业股票往往同涨同跌,构建投资组合时应避免资金过度集中在单一行业,否则"分散"只是形式上的。
执行代码后还会弹出热力图,效果如下图所示(颜色越红代表相关性越强):
注意:vmin=-1, vmax=1 把色条范围固定在相关性的理论区间,让不同图表之间可以直接对比;不加这个参数时,色条范围会随数据自动伸缩。
选型建议
Matplotlib 和 Seaborn 不是二选一的关系,实践中通常配合使用:
| 场景 | 推荐工具 |
|---|---|
| 快速探索数据、统计图表 | Seaborn,代码少、默认样式好 |
| 精细控制图表每个细节 | Matplotlib,自由度最高 |
| 量化专属图形(K 线图等) | 需要专门库,见 股票 K 线图 |
| 网页交互式图表 | pyecharts、Plotly |
点我分享笔记