2016-05-02 136 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