我有一个seaborn热图,我使用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
但它不起作用......我怎么能这样做?
答案 0 :(得分:1)
看起来你正在调用格式不正确。您需要指定要格式化的内容。这是一个例子:
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'
希望这就是你所追求的目标。
答案 1 :(得分: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)
将参数添加到其中。但是要修改字典的内容,您需要使用接受dict的lambda,然后通过必要的修改将其解包。我们通过键"x"
获取值并将其加70
d
之前的那些星号是从给定的关键字参数形成字典。所以当这样调用函数f(**d)
时,f(a=1, b=2, c=3)
会有一个字典d
,其中key:value
对来自参数:{"a":1, "b":2, "c":3}
。这允许函数接受任意数量的参数,并将它们都很好地存储在字典中供您使用。