如何在Matplotlib单图中绘制多个密度函数?
解决Matplotlib多密度函数同图绘制问题
问题核心:每次调用df.plot.density()时,pandas默认会创建新的绘图窗口。要将多个密度函数合并到同一图中,关键是指定同一个Axes对象供所有绘图调用复用。
具体实现方案
方法1:手动创建共用Axes并传入
先初始化一个共用的绘图轴,然后对每个数据集绘图时传入该轴:
import matplotlib.pyplot as plt import pandas as pd # 假设有多个数据集 df1 = pd.DataFrame({'col1': [1,2,3,4,5]}) df2 = pd.DataFrame({'col2': [2,3,4,5,6]}) df3 = pd.DataFrame({'col3': [3,4,5,6,7]}) # 创建共用的Figure和Axes fig, ax = plt.subplots() # 每个数据集的密度图都绘制到同一个ax上 df1.plot.density(ax=ax, label='数据集1') df2.plot.density(ax=ax, label='数据集2') df3.plot.density(ax=ax, label='数据集3') # 添加图例、标题等美化设置 ax.legend() ax.set_title('多个密度函数对比') ax.set_xlabel('数值') ax.set_ylabel('密度') # 显示绘图 plt.show()
方法2:修改类方法支持Axes复用
如果是在类的方法中,可以调整方法让它接受ax参数,方便多次调用时复用同一轴:
import matplotlib.pyplot as plt import pandas as pd class YourClass: def get_probability(self, df, ax=None): # 若未传入ax,则新建绘图对象 if ax is None: fig, ax = plt.subplots() # 绘制密度图到指定ax df.plot.density(ax=ax) # 返回ax供后续调用复用 return ax # 使用示例 obj = YourClass() # 第一次调用创建ax ax = obj.get_probability(df1) # 后续调用传入同一个ax obj.get_probability(df2, ax=ax) obj.get_probability(df3, ax=ax) # 添加图例和标题 ax.legend(['数据集1', '数据集2', '数据集3']) ax.set_title('多数据集密度函数叠加') plt.show()
原理说明
pandas的plot系列方法默认会自动创建新的Figure和Axes对象。通过显式指定ax参数,强制所有绘图操作在同一个Axes上渲染,从而实现多个密度函数在同一窗口中叠加显示。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

