Python 带偏移量的格式化字符串

Python format string with offset

我有一个 seaborn 热图,我正在使用 mpldatacursor 在方块上显示注释,在本例中为 x 轴坐标:

我通过以下行显示悬停工具提示:

datacursor(hover=True, axes = self.axh, formatter = "Value: {x:.0f}".format)

问题是,我的数据是从70开始的,而热图的x轴索引是从0开始的,这就是为什么图像中的值为7的原因。我想做的是找到一些方法到 "add" 值的偏移量,这样我就能得到正确的值,即 77。我尝试了以下操作:

formatter = str(eval(str("{x:.0f}".format) + "70")).format

但是它不起作用...我该怎么做?

看来您调用的格式不正确。您需要指定要格式化的内容。这是一个例子:

val = 7
out = '{:0f}'.format(val)

产量:

'7.000000'

如果你想用它来加 70,你可以试试这个:

val = 7
out = str(float('{:0f}'.format(val)) + 70) 

产生:

'77.0'

最后,将其转换为 lambda 函数:

formatter = lambda x: str(float('{:0f}'.format(x)) + 70)
formatter(7)
>> '77.0'

希望这就是您所追求的。

这应该有效:

formatter = lambda **d: "Value: {:.0f}".format(d["x"] + 70)

所以之前的问题是我没看懂formatter参数应该提供什么。示例代码显示 format 的错误用法的原因是因为格式化程序实际上使用字典参数调用函数(或在本例中为方法)。于是就变成了这样:

d = {x:123} # this is just to show what d is, it's not part of the code
"Value: {x:.0f}".format(d)

参数已添加到其中。但是要修改字典的内容,您需要使用接受字典的 lambda,然后通过必要的修改将其解包。我们通过键 "x" 获取值并向其添加 70。
d 之前的那些星号将根据给定的关键字参数形成字典。所以一个函数 f(**d) 当像这样调用时:f(a=1, b=2, c=3) 将有一个字典 d 和来自参数的 key:value 对:{"a":1, "b":2, "c":3}。这允许该函数接受任意数量的参数并将它们都很好地存储在字典中供您使用。