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

如何在Matplotlib中制作扇形交互按钮以展示预算详情?

实现扇形区域的点击交互

要实现点击扇形区域显示详情的功能,你需要用Matplotlib的**填充图形(Patch)**替代原来的线条绘制,再结合鼠标拾取事件(pick event)处理点击交互。以下是完整解决方案:

步骤说明

  • 用matplotlib.patches.Wedge创建环形扇区(模拟你需要的环形效果),替换原plt.plot线条。
  • 给每个扇区设置picker=True,开启拾取功能。
  • 定义点击事件处理函数,判断点击的扇区并展示对应详情。

完整代码

import matplotlib.pyplot as plt
from matplotlib.patches import Wedge
import numpy as np

# 环形参数
r_outer = 1  # 外半径
r_inner = 0.7  # 内半径,控制环形宽度
coefficient = 0.8  # 已支出占比系数

# 弧度转角度工具函数
def rad2deg(rad):
    return rad * 180 / np.pi

# 总预算扇区:完整环形,蓝色
total_budget_wedge = Wedge(
    center=(0, 0),
    r=r_outer,
    theta1=rad2deg(-np.pi),
    theta2=rad2deg(np.pi),
    width=r_outer - r_inner,
    color='tab:blue',
    picker=True
)

# 已支出扇区:对应系数占比的环形部分,橙色
spent_wedge = Wedge(
    center=(0, 0),
    r=r_outer,
    theta1=rad2deg(-np.pi),
    theta2=rad2deg(np.pi * coefficient),
    width=r_outer - r_inner,
    color='tab:orange',
    picker=True
)

# 创建绘图对象
fig, ax = plt.subplots()
ax.add_patch(total_budget_wedge)
ax.add_patch(spent_wedge)

# 设置坐标轴样式
ax.set_aspect('equal')
ax.axis('off')

# 点击事件处理逻辑
def on_pick(event):
    clicked_patch = event.artist
    if clicked_patch == total_budget_wedge:
        # 这里替换为你的总预算详情展示逻辑
        print("总预算详情:")
        print("- 总金额:5000元")
        print("- 周期:2024年6月")
    elif clicked_patch == spent_wedge:
        # 这里替换为你的已支出详情展示逻辑
        print("已支出详情:")
        print("- 已花费:4000元")
        print("- 类目:餐饮1500元、交通800元、购物1700元")

# 绑定拾取事件
fig.canvas.mpl_connect('pick_event', on_pick)

plt.show()

代码说明

  • Wedge对象:通过外半径、内半径、起始/结束角度创建环形扇区,width参数控制环形的宽度,替代原代码中linewidth的视觉效果。
  • 拾取功能:picker=True让Matplotlib识别该图形的点击事件,点击整个扇区范围都会触发响应。
  • 事件处理:on_pick函数在点击时触发,通过event.artist获取被点击的图形,判断后展示对应详情。你可以把打印逻辑替换为弹窗、子图展示等更直观的形式。

原代码用plt.plot绘制的是线条,只能识别线体范围的点击,无法覆盖整个扇形区域。改用填充Wedge后,才能实现你需要的扇形区域点击交互。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:52:32