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

Python中点击柱状图/直方图柱子返回对应DataFrame的实现方法

直方图点击交互实现方案

你当前用的pandas内置直方图是基于matplotlib实现的,只要给画布绑定点击事件回调即可实现需求,完整可运行代码如下:

import pandas as pd
import matplotlib.pyplot as plt

# 1. 构造示例数据
dict_name = {'name': ['kate', 'alex', 'charlene', 'terry', 'bill'], 
             'score': [8, 9, -0.3, -0.3, -0.3], 
             'area': ['arizona', 'washington', 'miami', 'texas', 'texas']}
df = pd.DataFrame.from_dict(dict_name, orient='columns')
print("原始全量数据:\n", df)

# 2. 绘制直方图,同时获取bin区间和柱子对象
fig, ax = plt.subplots()
n, bins, patches = ax.hist(df['score'], bins=4)

# 3. 定义点击事件回调函数
def on_click(event):
    # 只响应点击柱子的动作
    for patch, bin_left, bin_right in zip(patches, bins[:-1], bins[1:]):
        if patch.contains(event)[0]:
            # 筛选出当前柱子对应区间的所有数据
            filtered_df = df[(df['score'] >= bin_left) & (df['score'] < bin_right)]
            print("\n=== 你点击的柱子对应数据如下 ===")
            print(filtered_df)
            # 这里直接拿到filtered_df可以直接对接你后续的可视化逻辑
            return

# 4. 绑定点击事件到画布
fig.canvas.mpl_connect('button_press_event', on_click)

plt.show()

核心逻辑说明

  • 调用ax.hist时会返回三个值:n是每个柱子的高度(对应样本数)、bins是每个区间的边界值、patches是所有柱子的图形对象集合
  • 回调函数里会遍历所有柱子,判断当前点击的位置是否落在某个柱子范围内
  • 匹配到对应柱子后,用该柱子的左右区间边界去过滤原始DataFrame,就能得到构成该柱子的全部数据
  • 你可以在回调函数里直接用拿到的filtered_df做后续的深度可视化,不需要额外做数据转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:15:04