带偏移量的Python格式字符串

带偏移量的Python格式字符串,python,format,seaborn,Python,Format,Seaborn,我有一张海生热图,我使用mpldatacursor在正方形上显示注释,在本例中,x轴坐标: 我将通过以下行显示悬停工具提示: datacursor(hover=True, axes = self.axh, formatter = "Value: {x:.0f}".format) 问题是,我的数据从70开始,热图的x轴索引从0开始,这就是为什么图像中的值是7。我想做的是找到一种方法来“添加”偏移量到值,这样我就可以得到正确的值,即77。我尝试了以下方法: formatter=str(eval(

我有一张海生热图,我使用
mpldatacursor
在正方形上显示注释,在本例中,x轴坐标:

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

datacursor(hover=True, axes = self.axh, formatter = "Value: {x:.0f}".format)
问题是,我的数据从70开始,热图的x轴索引从0开始,这就是为什么图像中的值是7。我想做的是找到一种方法来“添加”偏移量到值,这样我就可以得到正确的值,即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'

希望这就是你想要的。

看起来你打电话的格式不正确。您需要指定要格式化的内容。下面是一个例子:

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)
所以之前的问题是,我不明白应该向
格式化程序
参数提供什么。示例代码显示
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来接受dict,然后通过必要的修改将其解包。我们通过键
“x”
获取值,并向其中添加70。
d
前面的星号将根据给定的关键字参数构成字典。因此,函数
f(**d)
在这样调用时:
f(a=1,b=2,c=3)
将有一个字典
d
,带有
键:值
对,参数为:
{“a”:1,“b”:2,“c”:3
。这允许函数接受任意数量的参数,并将它们都很好地存储在字典中供您使用。

这应该可以:

formatter = lambda **d: "Value: {:.0f}".format(d["x"] + 70)
所以之前的问题是,我不明白应该向
格式化程序
参数提供什么。示例代码显示
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来接受dict,然后通过必要的修改将其解包。我们通过键
“x”
获取值,并向其中添加70。

d
前面的星号将根据给定的关键字参数构成字典。因此,函数
f(**d)
在这样调用时:
f(a=1,b=2,c=3)
将有一个字典
d
,带有
键:值
对,参数为:
{“a”:1,“b”:2,“c”:3
。这允许函数接受任意数量的参数,并将它们很好地存储在字典中供您使用。

谢谢@Leva7但它不起作用,我得到错误:
TypeError:()得到一个意外的关键字参数“label”
@MrPedru22请检查,我认为这可能现在是正确的。谢谢@Leva7,但它不起作用,我得到了错误:
TypeError:()得到了一个意外的关键字参数“label”
@MrPedru22检查一下,我认为这现在可能是正确的。谢谢@stackunderflow,但它也不起作用,我得到了与@Leva7中相同的错误答案:
TypeError:()获取了一个意外的关键字参数“label”
@MrPedru22:我想这可能是您的问题。请注意,lambda函数可以视为任何正则函数。在以下情况下,“x”是预期的输入参数:
a=lambda x:x+1
如果然后尝试调用值“2”上的函数a,它现在应该返回“3”
a(2)>>3
,如果尝试命名输入,如果不匹配,它可能会崩溃
a(label=2)TypeError:()得到一个意外的关键字参数'label'
有两种解决方案。第一个是只做函数:
a=lambda label:label+1
,或者只传入值而不是给它加标签:
a(2)>3
谢谢@stackunderflow,但它也不起作用,我得到了与@Leva7 answer中相同的错误:
TypeError:()获取了一个意外的关键字参数“label”
@MrPedru22:我想这可能是您的问题。请注意,lambda函数可以视为任何正则函数。在以下情况下,“x”是预期的输入参数:
a=lambda x:x+1
如果然后尝试调用值“2”上的函数a,它现在应该返回“3”
a(2)>>3
,如果尝试命名输入,如果不匹配,它可能会崩溃
a(label=2)TypeError:()得到一个意外的关键字参数'label'
有两种解决方案。第一种方法是只做函数:
a=lambda label:label+1
,或者只传入值而不是给它加标签:
a(2)>3