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

求助:调用plot_density_chart绘制密度图失败,求解决办法

解决密度图绘制失败问题

数据处理代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = {'type_sale':[100,200,400,400,200,400,300,200,210,300],
        'bool':[0,1,0,1,1,0,1,1,0,1],
        }
df1 = pd.DataFrame(data, columns = ['type_sale',
                                      'bool'])

df1['bool']= df1['bool'].astype('int32')

问题说明

你调用的plot_density_chart并非Python可视化库(如matplotlib、seaborn)的内置函数,未提前定义就直接使用会导致运行报错。你的调用代码如下:

plot_density_chart(df1[['type_sale', 'bool']], "bool", 'type_sale',
                    category_var="type_sale", title='prevalence', 
                    xlabel='Type_sale', logx="Yes", vline=None, 
                    save_figure_name = 'type_sale_prevalence.pdf')

解决方法

以下提供两种可行方案:

方案1:实现自定义plot_density_chart函数

根据你传入的参数需求,实现一个适配的基础版本函数:

import seaborn as sns

def plot_density_chart(data, target_var, x_var, category_var=None, title='', xlabel='', logx="Yes", vline=None, save_figure_name=None):
    plt.figure(figsize=(10,6))
    
    # 按指定类别分组绘制密度曲线
    if category_var:
        for cat_val in data[category_var].unique():
            subset = data[data[category_var] == cat_val]
            sns.kdeplot(subset[x_var], label=f'{category_var}: {cat_val}', fill=True)
    else:
        sns.kdeplot(data[x_var], fill=True)
    
    # 启用x轴对数刻度
    if logx == "Yes":
        plt.xscale('log')
    
    # 添加垂直线(若需要)
    if vline is not None:
        plt.axvline(vline, color='red', linestyle='--')
    
    # 设置图表标题与轴标签
    plt.title(title)
    plt.xlabel(xlabel)
    plt.legend()
    
    # 保存图表(若指定路径)
    if save_figure_name:
        plt.savefig(save_figure_name)
    plt.show()

# 调用自定义函数(注意:原参数中category_var设为type_sale意义不大,改为按bool分组更合理,可按需调整)
plot_density_chart(df1[['type_sale', 'bool']], "bool", 'type_sale',
                    category_var="bool", title='prevalence', 
                    xlabel='Type_sale', logx="Yes", vline=None, 
                    save_figure_name = 'type_sale_prevalence.pdf')

方案2:直接用原生库绘制简化版密度图

如果不需要复杂的自定义参数,直接用seaborn+matplotlib快速实现:

# 按bool分组绘制密度图
groups = df1.groupby('bool')
plt.figure(figsize=(10,6))

for name, group in groups:
    sns.kdeplot(group['type_sale'], label=f'bool={name}', fill=True)

plt.xscale('log')
plt.title('prevalence')
plt.xlabel('Type_sale')
plt.legend()
plt.savefig('type_sale_prevalence.pdf')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:30:46