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

如何在PyQt5集成的Plotly图表中返回用户点击的列名

解决PyQt5中Plotly柱状图点击获取对应列名(Inflow/Outflow)的问题

你需要给所有柱状图系列(trace)绑定点击事件,并利用Plotly点击事件返回的points对象直接获取对应列名,具体修改如下:

核心修改点

  1. 移除多余的fig = go.Figure()创建语句,避免被px.bar覆盖
  2. 遍历所有trace,为每个柱子系列绑定点击事件
  3. 在click_event中通过points.trace.name直接获取目标列名(Inflow/Outflow)

修改后的完整代码

from PyQt5 import QtWidgets, QtWebEngineWidgets
from PyQt5.QtWidgets import *
import sys

import pandas as pd

import plotly.graph_objs as go
import plotly.express as px


app = QApplication([])
tab = QTabWidget()
tab.setGeometry(
    0, 0,
    QApplication.desktop().width(), QApplication.desktop().height())


class Tab_bank_statement(QWidget):
    def __init__(self):
        super().__init__()
        self.grid = QtWidgets.QGridLayout()
        self.setLayout(self.grid)

        self.window_dashboard_bank_statement()
        
    def window_dashboard_bank_statement(self):
        df = pd.read_feather('bank_statement.feather')
        df_pivot = df.groupby(
            pd.Grouper(key='Date', freq='M'),
            group_keys=False).agg({'Inflow': 'sum','Outflow': 'sum'}).reset_index()

        # 直接使用px.bar生成图表,移除多余的go.Figure()创建
        fig = px.bar(df_pivot, x='Date', y=['Inflow', 'Outflow'], barmode='group')
        fig._config = {'displayModeBar': False}

        def click_event(ace, points, state):
            # 提取点击柱子对应的列名
            column_name = points.trace.name
            print(f"点击的列名: {column_name}")

        # 为所有柱子系列绑定点击事件
        for trace in fig.data:
            trace.on_click(lambda ace, points, state: click_event(ace, points, state))

        browser = QtWebEngineWidgets.QWebEngineView()
        browser.setHtml(fig.to_html(include_plotlyjs='cdn'))

        self.grid.addWidget(browser, 0, 2)


tab.addTab(Tab_bank_statement(), "Bank_statement")


if __name__ == '__main__':
    tab.show()
    sys.exit(app.exec_())

关键说明

  • Plotly通过px.bar生成多列柱状图时,每一列对应一个独立的trace,trace的name属性就是你传入的y轴列名
  • 点击事件触发时,points对象包含当前点击的trace信息,直接提取trace.name即可得到目标列名
  • 遍历所有trace绑定事件,确保点击任意柱子都能触发响应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:00:01