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

如何为全量时序数据堆叠柱状图添加横向滚动条?

实现带横向滚动条的全量堆叠柱状图

针对大数据量时间序列堆叠柱状图拥挤的问题,你可以通过结合Matplotlib和Tkinter实现带横向滚动条的可视化方案,以下是完整代码:

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

# 1. 处理数据(保留原有逻辑,使用全量数据)
node_df = df.resample('H', on='START_TIMESTAMP').NODES_USED.sum()
node_df = pd.DataFrame(node_df, columns=['NODES_USED'])
node_df['UNUSED_NODES'] = 49152 - node_df['NODES_USED']
total_bars = len(node_df)
# 可自定义初始显示的柱状条数量
display_count = 20

# 2. 创建Tkinter窗口
root = tk.Tk()
root.title("Node Usage Stacked Bar Chart")

# 3. 创建Matplotlib图形和轴
fig, ax = plt.subplots(figsize=(15, 12))
node_df.plot.bar(stacked=True, ax=ax)
ax.set_xlabel('Time')
ax.set_ylabel('Nodes')
ax.legend(loc='upper right')

# 设置初始x轴显示范围
ax.set_xlim(0, display_count)

# 4. 将Matplotlib画布嵌入Tkinter
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

# 添加Matplotlib工具栏
toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

# 5. 创建横向滚动条并绑定交互逻辑
scrollbar = ttk.Scrollbar(root, orient=tk.HORIZONTAL)
scrollbar.pack(side=tk.BOTTOM, fill=tk.X)

def scroll_x(*args):
    # 根据滚动条位置计算显示起始索引
    start_idx = int(scrollbar.get()[0] * (total_bars - display_count))
    ax.set_xlim(start_idx, start_idx + display_count)
    fig.canvas.draw_idle()

scrollbar.config(command=scroll_x)
scrollbar.config(from_=0, to=total_bars - display_count)

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

关键说明:

  • 基于Tkinter实现滚动条与Matplotlib画布的联动,交互逻辑直观
  • 可通过修改display_count调整单次显示的柱状条数量
  • 滚动拖动时,通过修改ax.set_xlim()动态切换显示的时间区间
  • 完全保留原有堆叠柱状图的样式,同时支持全量数据的滚动查看

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:47:06