You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:00:58