2016-05-02 76 views
0

我有seaborn热图,以及我使用mpldatacursor上显示的平方注释,在这种情况下,x轴坐标: enter image description herePython的格式字符串与偏移

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

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

的问题是,我的数据开始于70和热图的X轴指数从0开始,这就是为什么图像中的值为7。我试图做是找到某种方法来为这个值“添加”一个偏移量,这样我就能得到正确的值,即77.我试过了fo llowing:

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

但它不工作...我怎样才能做到这一点?

回答

1

这应该工作:

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)将具有来自参数{"a":1, "b":2, "c":3}的字典dkey:value对。这允许函数接受任意数量的参数,并将它们全部很好地存储在字典中供您使用。

+0

谢谢@Leva7但它确实不工作,我得到的错误:'TypeError:()得到了一个意想不到的关键字参数'label'' – MrPedru22

+1

@ MrPedru22检查出来,我认为这可能是正确的。 – Leva7

1

它看起来好像你打电话格式不正确。你需要指定你的格式。这里有一个例子:

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

国债收益率:

'7.000000' 

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

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

这将产生:

'77.0' 

最后,把它变成一个la mbda功能:

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

希望这就是你所追求的。

+0

谢谢@stackunderflow,但它也行不通,我得到了同样的错误在@ Leva7答案:TypeError:()得到了一个意想不到的关键字参数'标签' – MrPedru22

+1

@ 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