2010-10-26 33 views
3

我想要繪製一個使用pyplot和matplotlib的基本對半座標圖,y軸是對數座標。我使用下面的代碼:Matplotlib - 當我切換到一個半對數座標圖時,數據消失

pylab.figure(num=None,figsize=(8,6)) 
pylab.plot(x_loc,var1,x_loc,var2) 
\#pylab.yscale('log') 
pylab.xlabel('$y/L_{1/2}$',fontsize=18) 
pylab.ylabel('$n/n_{max}$',fontsize=18) 
pylab.title('Particle Concentration vs. Position',fontsize=18) 
pylab.show() 

這使我與第三行精細線性圖如上評論,但是當我取消註釋該行並重新運行,數據從圖中消失。繪圖窗口有正確的限制,但沒有數據了。

有沒有人遇到過這個問題?

謝謝!
Peter

+0

也許你的y數據是負面的?所以日誌(y)不會返回正確的東西? – tillsten 2010-10-31 18:45:07

回答

1

通過使用set_yscale('log'),您可以在已經創建對象時更改yscale的屬性。試一試,看看它是否能解決你的問題。爲此的文檔在這裏:http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.set%5Fyscale

此外,請嘗試更改您的渲染。做:

from matplotlib import use 
use('TkAgg') 
import pylab 

(使用命令後僅進口pylab)

+0

感謝您的快速響應,但不幸的是,這並沒有解決問題。也不使用pylab.semilogy。我注意到,如果我在數據所在的區域之外平移並重新平移,數據會再次出現。但我寧願不必每次都這樣做... – Peter 2010-10-26 21:02:34

+0

matplotlib您使用的是哪個版本? – relima 2010-10-26 21:11:34

0

它看起來像它在我使用(從Enthought)的EPDLab包的錯誤。如果我從IPython或終端(python'文件名')運行這個命令,繪圖會正確輸出。

1

該問題提到有一個semilog圖的問題,但代碼說明了一個普通的對數圖。 在任何情況下,繪圖或部分繪圖消失的常見問題是由於數據點具有零值或負值 - 因爲這些不能用實數表示,所以它們從繪圖中省略。但它有可能獲得matplotlib利用其symlog規模,其使用閾值結合日誌和線性刻度linthreshy在他們改變如繪製這些值:

pylab.yscale('symlog',linthreshy=1) 

對於更詳細的解釋symlog和日誌圖之間的區別見answer

相關問題