如何修改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
相关产品推荐
相关产品推荐

