如何在Matplotlib交互模式下修改鼠标悬停时数值的显示格式
修改Matplotlib悬停数值的显示格式
如果要让悬停时的数值不再以科学计数法呈现,分以下几种场景处理:
1. 自定义悬停坐标的显示格式
你已经在使用format_coord自定义坐标显示,只需调整格式化逻辑,就能避免科学计数法,直接显示整数或自定义格式:
def format_coordinates_int(x, y): # 四舍五入转整数,用%d或%i格式化避免科学计数法 x_int = int(round(x)) y_int = int(round(y)) return f"X={x_int:d} Y={y_int:d}" axes.format_coord = format_coordinates_int
如果需要更灵活的格式(比如带千分位分隔的整数),可以用Python字符串格式化语法:
def format_coordinates_custom(x, y): x_int = int(round(x)) y_int = int(round(y)) # 千分位分隔格式 return f"X={x_int:,d} Y={y_int:,d}"
2. 显示额外关联数值并自定义格式
如果“下方显示的对应数值”是和数据点绑定的额外数据集(不是坐标本身),可以把数据集传入格式化函数,找到对应位置的数值后再格式化:
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots() # 示例数据 x_data = np.arange(10) y_data = np.array([100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000]) extra_values = y_data * 2 # 关联的额外数值 ax.plot(x_data, y_data) def format_coord(x, y): # 找到最接近当前x坐标的数据点索引 idx = np.argmin(np.abs(x_data - x)) # 格式化额外数值为整数(避免科学计数法) val = extra_values[idx] x_int = int(round(x)) y_int = int(round(y)) return f"X={x_int:d} Y={y_int:d} 对应数值={val:d}" ax.format_coord = format_coord plt.show()
3. 全局禁用科学计数法
如果想让整个图表(包括坐标轴刻度和悬停显示)都不用科学计数法,可以设置全局格式化器:
from matplotlib.ticker import ScalarFormatter # 获取当前轴 ax = plt.gca() # 设置Y轴格式化器,禁用科学计数法 formatter = ScalarFormatter(useOffset=False, useMathText=False) formatter.set_scientific(False) ax.yaxis.set_major_formatter(formatter)
内容的提问来源于stack exchange,提问作者imad.nyc
相关产品推荐
相关产品推荐

