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

将pandas堆叠柱状图插入Tkinter notebook选项卡并修改图例名称的方法

实现方案

以下是完整可直接运行的实现代码:

import tkinter as tk
from tkinter import ttk
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 构造示例DataFrame,可替换为你自己的数据读取逻辑
data = {
    'Date': ['2015-10-02', '2015-01-02', '2015-01-02', '2015-12-02', '2015-01-02', '2015-08-02', '2015-03-02'],
    'Alarm': ['Adam', 'David', 'Adam', 'Adam', 'David', 'Hardik', 'David'],
    'Count': [1,4,4,0,6,2,4]
}
df = pd.DataFrame(data)

# 数据聚合:相同日期下按Alarm分组求和,避免日期索引重复
# 如果需要保留原始重复日期,可替换为你原本的df2构造逻辑
df_pivot = df.pivot_table(index='Date', columns='Alarm', values='Count', aggfunc='sum').fillna(0)

# 初始化Tkinter主窗口
root = tk.Tk()
root.title("堆叠图嵌入演示")
root.geometry("1200x600")

# 创建Notebook选项卡组件
notebook = ttk.Notebook(root)
notebook.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

# 新增第一个选项卡,用于放置图表
chart_tab = ttk.Frame(notebook)
notebook.add(chart_tab, text="堆叠柱状图")

# 手动创建matplotlib画布,避免默认弹出独立窗口
fig, ax = plt.subplots(figsize=(15, 5))
# 绘制堆叠柱状图
df_pivot.plot(kind='bar', stacked=True, ax=ax)
# 设置图例标题为Name
ax.legend(title="Name")
# 自动调整布局避免标签截断
plt.tight_layout()

# 将matplotlib画布绑定到Tkinter选项卡
canvas = FigureCanvasTkAgg(fig, master=chart_tab)
canvas.draw()
# 放置画布组件到选项卡内
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

# 启动Tkinter主循环
root.mainloop()

关键逻辑说明

  • 手动创建matplotlib的Figure和Axes对象,而不是直接调用df.plot的默认渲染逻辑,才能将图像嵌入到Tkinter组件中
  • 通过ax.legend(title='Name')直接设置图例标题满足需求
  • 用FigureCanvasTkAgg作为中间适配层,把matplotlib的渲染结果绑定到Tkinter的容器组件上
  • 示例中增加了数据聚合逻辑,解决了原始构造df2时相同日期重复出现的问题,如果需要保留原始的重复日期索引,直接替换df_pivot为你自己构造的df2即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:39:05