2014-01-15 62 views
3

我正在爲不同的數據集製作對數圖,並且需要包含最佳擬合線方程。我知道應在哪裏放置方程,但由於數據集有非常不同的值,因此我想在註釋中使用相對座標。 (否則,註釋將移動到每個數據集。)Matplotlib註釋在日誌規模上不起作用?

我知道matplotlib的annotate()函數,我知道我可以使用textcoords ='axes fraction'來啓用相對座標。當我在常規尺度上繪製數據時,它可以工作。但是,然後我至少更改了一個要記錄的比例,註釋消失。我沒有收到任何錯誤消息。

這裏是我的代碼:

plt.clf() 
samplevalues = [100,1000,5000,10^4] 
ax = plt.subplot(111) 
ax.plot(samplevalues,samplevalues,'o',color='black') 
ax.annotate('hi',(0.5,0.5), textcoords='axes fraction') 
ax.set_xscale('log') 
ax.set_yscale('log') 
plt.show() 

如果我註釋掉ax.set_xcale('log')ax.set_ycale('log'),註釋正好出現在情節的中間(它應該是)。否則,它不會出現。

在此先感謝您的幫助!

+0

我懷疑這是關係到https://github.com/matplotlib/matplotlib/issues/1311我前一陣子報道,但我認爲任何人都沒有找到它。機率是這是一些奇怪的浮點問題。 – tacaswell

+0

@tcaswell你會知道我該如何向matplotlib開發人員報告這件事嗎?謝謝! – irene

+0

我就是其中之一,所以你是這方面的一部分;)你能否對這個問題發表評論?除了代碼之外,你還可以包含你正在使用的mpl版本('matplotlib .__ version__')? – tacaswell

回答

1

這可能真的是因爲在評論中指出@tcaswell一個錯誤,但一個解決方法是使用文本()在軸座標:

plt.clf() 
samplevalues = [100,1000,5000,10^4] 
ax = plt.subplot(111) 
ax.loglog(samplevalues,samplevalues,'o',color='black') 
ax.text(0.5, 0.5,'hi',transform=ax.transAxes) 
plt.show() 

另一種方法是使用figtext(),但是這是如果已經有幾塊地塊(面板),則使用起來更麻煩。

順便說一句,在上面的代碼中,我直接使用對數標尺繪製數據。也就是說,不是,:

ax.plot(samplevalues,samplevalues,'o',color='black') 
ax.set_xscale('log') 
ax.set_yscale('log') 

我所做的:

ax.loglog(samplevalues,samplevalues,'o',color='black') 
+0

工作就像一個魅力。謝謝。 – irene