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

基于Plotly实现多饼图切换的下拉菜单开发求助

解决方案:用ipywidgets.interact实现饼图切换

第一步:DataFrame管理建议

直接把7个DataFrame合并成单个带标识列的DataFrame,比维护7个独立变量方便太多。给每个DF加一列客户画像类型(比如"类型A"、"类型B"...),用pd.concat合并后,后续筛选数据只需要按这个列过滤就行。

第二步:完整实现代码

假设你的每个DataFrame结构是:部门、区域1消费、区域2消费、区域3消费、区域4消费,以下是可直接复用的代码框架:

import pandas as pd
import matplotlib.pyplot as plt
from ipywidgets import interact

# ----------------------
# 1. 替换成你自己的实际数据(这里是模拟7个DataFrame)
df_list = []
for i in range(7):
    df = pd.DataFrame({
        "部门": ["零售", "餐饮", "娱乐", "服务"],
        "区域1": [100+i*10, 80+i*8, 50+i*5, 30+i*3],
        "区域2": [120+i*12, 90+i*9, 60+i*6, 40+i*4],
        "区域3": [90+i*9, 70+i*7, 40+i*4, 25+i*2],
        "区域4": [110+i*11, 85+i*8, 55+i*5, 35+i*3]
    })
    df["客户画像类型"] = f"类型{i+1}"
    df_list.append(df)

# 合并成单个DataFrame
combined_df = pd.concat(df_list, ignore_index=True)
# ----------------------

# 2. 定义绘制饼图的函数
def plot_pie(customer_type):
    # 筛选当前选中的客户画像数据
    filtered_df = combined_df[combined_df["客户画像类型"] == customer_type]
    
    # 创建4个子图(对应4个区域)
    fig, axes = plt.subplots(2, 2, figsize=(10, 8))
    axes = axes.flatten()  # 把2x2子图数组转成一维,方便循环
    
    # 遍历每个区域绘制饼图
    regions = ["区域1", "区域2", "区域3", "区域4"]
    for ax, region in zip(axes, regions):
        data = filtered_df[region].values
        labels = filtered_df["部门"].values
        
        ax.pie(data, labels=labels, autopct='%1.1f%%', startangle=90)
        ax.set_title(f"{region}消费占比")
    
    plt.tight_layout()
    plt.show()

# 3. 创建下拉菜单交互
interact(plot_pie, customer_type=combined_df["客户画像类型"].unique())

关键说明

  • 要是你坚持用7个独立DataFrame,也可以把它们放进一个字典(比如df_dict = {"类型A": df_a, "类型B": df_b,...}),然后修改plot_pie里的筛选逻辑为filtered_df = df_dict[customer_type],效果一样,但合并成单个DF更易维护。
  • interact会自动根据传入的customer_type选项生成下拉菜单,每次切换时会调用plot_pie函数重新绘制图表。
  • 如果你原来的单个DF绘制代码是其他结构(比如每个区域是一行而非一列),只需要调整plot_pie里的数据提取逻辑即可,核心思路不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:10:22