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

如何修改Matplotlib中mplcursors悬浮注释的科学计数格式

修改mplcursors悬浮注释的科学计数格式

要调整mplcursors鼠标悬浮时注释的科学计数显示格式,你可以通过自定义formatter函数实现,替代原代码中仅调用annotation_kwargs的写法,这个函数能完全控制注释文本的内容和格式。

以下是修改后的完整代码:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import ScalarFormatter
import mplcursors as mpl

class Compound():
    @staticmethod
    def accumulation(i,t):
        return (1+i)**t
    @staticmethod
    def discount(i,t):
        return (1-i)**(-t)
    
years= np.linspace(1,1000,12000)

%matplotlib widget

fig, ax = plt.subplots()
ax.yaxis.set_major_formatter(ScalarFormatter(useMathText=True))

plt.plot(years,0.93*Compound.accumulation(0.0225,years))
plt.title('Interest')

# 自定义注释格式函数
def format_annotation(sel):
    x_val = sel.target[0]
    y_val = sel.target[1]
    # 自定义格式:年份保留2位小数,数值用科学计数法保留4位小数
    sel.annotation.set_text(f"年份: {x_val:.2f}\n数值: {y_val:.4e}")
    # 若要和坐标轴ScalarFormatter格式完全统一,可使用以下代码
    # formatter = ScalarFormatter(useMathText=True)
    # formatter.set_scientific(True)
    # formatter.set_powerlimits((-3, 4))
    # y_formatted = formatter.format_data(y_val)
    # sel.annotation.set_text(f"年份: {x_val:.2f}\n数值: {y_formatted}")

# 给cursor绑定自定义格式函数
mpl.cursor(hover=True).connect("add", format_annotation)

关键说明:

  • 自定义的format_annotation函数会在鼠标悬浮到数据点时触发,sel参数包含当前选中点的所有信息
  • 通过sel.annotation.set_text()直接设置注释文本,你可以根据需求调整格式化规则,比如修改小数位数、切换科学计数/普通计数显示
  • 如果希望注释格式和坐标轴的ScalarFormatter完全一致,可以启用注释里的备选代码,复用同一个格式化逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:10:39