matplotlib 如何使用交互模式更改鼠标悬停时值的格式

3hvapo4f  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(293)

我有一个图表,在matplotlib中显示。悬停时,它将显示右上角点的坐标以及其下方的值。然而,我试图改变值部分,使其不在科学记数法中,而是将其显示为全整数(或任何格式)。

我使用了本节中的format_coordinates来格式化坐标,所以我认为它也会在本节中。但是,我找不到要传递的内容来格式化值本身。下面的代码负责使悬停时的坐标捕捉到最接近的整数:

def format_coordinates_int(self,x,y) :
      return "X=%i Y=%i" % (int(x+0.5), int(y+0.5))

axes.format_coord = self.format_coordinates_int

我应该将这种格式传递到什么中才能对值产生相同的效果?

eimct9ow

eimct9ow1#

为了将悬停时显示的值格式化为整数,您应该使用matplotlib.ticker模块中的ScalarFormatter类。
它根据值的范围自动确定记号标签的格式。
默认情况下,ScalarFormatter使用科学符号表示大值或小值...但是,设置“useOffset=False”和“useMathText=False”,我们可以获得普通的整数格式。
format_data 方法返回它的字符串表示形式。

import matplotlib.ticker as ticker

def format_coordinates_int(self, x, y):
    x_int = int(x + 0.5)
    y_int = int(y + 0.5)
    value = self.norm(x, y) # value of the point, normalizing the data to the range [0, 1]
    value_int = ticker.ScalarFormatter(useOffset=False, useMathText=False).format_data(value) 
    return f"X={x_int} Y={y_int} Value={value_int}"

axes.format_coord = self.format_coordinates_int

相关问题