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

如何从pandas.DataFrame.plot.kde()提取生成的数据?

问题描述

我编写了如下代码:

ax1 = fig.add_subplot(221)
plot.confax(ax1)
ax1.set_ylabel('Extinction')
ax1.text(0.5, 0.8, 'Morning scatter',
          transform=ax1.transAxes,
          color='k', fontsize=8)
                
ax1 = dataframe.plot.kde()

请问如何提取上述代码中dataframe.plot.kde()生成的数据?我查阅了相关文档但未找到有用信息,尝试了Stack Overflow上的其他问题建议,但均无效,我认为原因是我试图从Axes对象而非绘图中提取数据。

解决方案

方法1:从Axes对象提取已绘制的线条数据

dataframe.plot.kde()返回的Axes对象本身不存储KDE数据,数据实际保存在Axes下的Line2D线条对象中,可以通过以下方式提取:

# 获取Axes中的所有线条对象
lines = ax1.get_lines()
for line in lines:
    # 获取线条对应的列名
    col_name = line.get_label()
    # 提取x轴和y轴的KDE数据
    x_data = line.get_xdata()
    y_data = line.get_ydata()
    # 按需处理数据,比如存入字典或打印
    print(f"列 {col_name} 的KDE数据:")
    print("X值序列:", x_data)
    print("Y值序列:", y_data)

方法2:直接计算KDE数据(更高效)

如果不需要绘图只需要数据,直接调用pandas底层的计算逻辑,跳过绘图步骤,避免不必要的开销:

from scipy.stats import gaussian_kde
import numpy as np

kde_results = {}
for col in dataframe.columns:
    # 清理列中的缺失值
    clean_data = dataframe[col].dropna().values
    # 初始化KDE模型
    kde_model = gaussian_kde(clean_data)
    # 生成和plot.kde默认范围一致的x轴序列
    x_min = clean_data.min() - 3 * clean_data.std()
    x_max = clean_data.max() + 3 * clean_data.std()
    x_values = np.linspace(x_min, x_max, 1000)
    # 计算对应的KDE值
    y_values = kde_model(x_values)
    kde_results[col] = (x_values, y_values)

关键说明

  • dataframe.plot.kde()本质是调用scipy.stats.gaussian_kde计算数据后再绘图,直接计算的方式支持自定义带宽、x轴范围等参数,灵活性更高。
  • 从Axes提取的方式适合已经完成绘图,需要回溯获取数据的场景。

内容的提问来源于stack exchange,提问作者jaynorton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:06:11