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

如何在Matplotlib甘特图中实现矩形内文本随缩放自动显隐?

解决Matplotlib缩放时文本超出矩形自动隐藏的问题

需求概述

  • 绘制带固定字号文本的矩形(适用于甘特图场景)
  • 视图缩放时,若文本像素尺寸超过矩形范围则自动隐藏,文本尺寸小于矩形时重新显示

问题分析

你提供的示例代码仅静态添加了矩形和文本,未监听视图缩放/调整事件,无法动态判断文本与矩形的尺寸关系,因此缩放时不会自动隐藏文本。

实现方案

通过绑定Matplotlib的视图变化事件,实时计算文本与矩形的像素尺寸,动态切换文本可见性。

完整代码

from matplotlib import pyplot as plt, patches

def update_text_visibility(event):
    # 转换矩形坐标为像素空间,计算矩形像素宽高
    rect_bbox = rectangle.get_bbox()
    rect_pix = ax.transData.transform(rect_bbox)
    rect_width = rect_pix[1, 0] - rect_pix[0, 0]
    rect_height = rect_pix[1, 1] - rect_pix[0, 1]
    
    # 获取文本的像素尺寸
    text_bbox = text.get_window_extent()
    text_width = text_bbox.width
    text_height = text_bbox.height
    
    # 根据尺寸对比设置文本可见性
    text.set_visible(text_width < rect_width and text_height < rect_height)
    fig.canvas.draw_idle()

# 初始化绘图环境
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = fig.add_subplot(111)

# 添加矩形
rectangle = patches.Rectangle((0, 0), 3, 3, edgecolor='orange', facecolor="green", linewidth=7)
ax.add_patch(rectangle)

# 添加中心文本并保存引用
rx, ry = rectangle.get_xy()
cx = rx + rectangle.get_width()/2.0
cy = ry + rectangle.get_height()/2.0
text = ax.annotate("Rectangle", (cx, cy), color='black', weight='bold', fontsize=10, ha='center', va='center')

# 绑定视图变化事件
fig.canvas.mpl_connect('resize_event', update_text_visibility)
fig.canvas.mpl_connect('xlim_changed', update_text_visibility)
fig.canvas.mpl_connect('ylim_changed', update_text_visibility)

# 设置初始视图范围
plt.xlim([-5, 5])
plt.ylim([-5, 5])

# 初始化时检查文本可见性
update_text_visibility(None)

plt.show()

关键逻辑说明

  1. 事件绑定:监听窗口大小变化、x轴范围变化、y轴范围变化三类事件,确保任何缩放/视图调整操作都会触发可见性检查
  2. 像素尺寸计算:将矩形的坐标转换为像素空间,同时获取文本的实际显示像素尺寸,避免因坐标轴缩放导致的尺寸判断误差
  3. 动态可见性控制:对比文本与矩形的像素宽高,当文本尺寸小于矩形时显示,否则隐藏

效果示例

当视图缩放到文本超出矩形范围时(如下场景),文本会自动隐藏:
此时文本应隐藏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:44:57