如何用Python Anaconda同图绘制全量数据直方图和real变量的KDE曲线
问题原因
你当前的报错是因为代码中重复给hist参数赋值,同时seaborn的displot是Figure级接口,不支持直接传入两个不同数据集同时绘制不同类型的图表,因此无法直接用单条displot语句实现你的需求。
正确实现方案
推荐使用seaborn的Axes级绘图接口(histplot+kdeplot)实现叠加效果,代码更灵活可控:
import seaborn as sns from matplotlib import pyplot as plt import pandas as pd # 读取数据(路径前加r避免转义字符报错) ors = pd.read_excel(r'C:\Data\Book1.xlsx') # 筛选real分组子集 real_subset = ors[ors['Simulation'] == 'real'] sns.set_style('white') # 创建画布 fig, ax = plt.subplots(figsize=(8, 5)) # 绘制全量数据直方图,stat='density'保证和KDE纵轴尺度一致 sns.histplot(x='Scores', data=ors, ax=ax, stat='density', alpha=0.6) # 叠加real分组的红色KDE曲线 sns.kdeplot(x='Scores', data=real_subset, ax=ax, color='red', linewidth=3, label='real KDE') # 添加图例 plt.legend() plt.show()
如果你坚持要使用displot实现,也可以通过获取displot返回的坐标轴对象叠加KDE:
sns.set_style('white') # 先用displot绘制全量数据直方图 g = sns.displot(x='Scores', data=ors, stat='density', alpha=0.6) # 在displot的坐标轴上叠加KDE曲线 sns.kdeplot(x='Scores', data=real_subset, ax=g.ax, color='red', linewidth=3, label='real KDE') plt.legend() plt.show()
注意事项
- 读取本地文件的路径前建议加原始字符串标识
r,避免路径中\开头的转义字符引发读取错误 - 直方图设置
stat='density'是为了将默认的计数纵轴转换为密度尺度,和KDE曲线的输出尺度匹配,保证叠加效果合理
内容的提问来源于stack exchange,提问作者Iván
相关产品推荐
相关产品推荐

