2014-09-03 44 views
0

我有一個值列表,其中一些值需要在使用matplotlib繪圖之前進行轉換。Matplotlib和numpy:繪製x軸上的無限數字(pyzo)時出錯

的表達式看起來如下:

m=0 
while m < len(power): 
     for item in power: 
      if float(list1[m]) != 0: 
       list2.append(float((1/float(list1[m])-1)*float(power[m]))) 
      elif float(list1[m]) == 0: 
       list2.append("inf") 
      m+=1 

其中「功率」是0和100+(一個十進制)和list1的之間的值的列表可以是負的值,0或正值之間的任何(四位小數)。

正如你所看到的,以避免收到零除我有一個條件,以得到一個漸近的行爲,如果列表1 = 0

這工作得很好,和情節細膩,爲y軸。但是,如果我嘗試繪製在x軸上,我得到以下警告同樣的事情:

[...]\lib\site-packages\matplotlib\lines.py:504: RuntimeWarning: invalid value encountered in subtract 
return np.alltrue(x[1:] - x[0:-1] >= 0) 
[...]\lib\site-packages\matplotlib\lines.py:504: RuntimeWarning: invalid value encountered in greater_equal 
return np.alltrue(x[1:] - x[0:-1] >= 0) 

從我所看到的,情節看起來很好(有可能是我沒有看到的一些問題)但我想避免發出警告。

回答

0

如果您不給我們繪圖代碼,很難說您的繪圖代碼有什麼問題!但讓我們試試看:

%pylab 
power = randint(1, 100, 10) 
list1 = randn(10) 
list2 = [] 

m=0 
while m < len(power): 
     for item in power: 
      if float(list1[m]) != 0: 
       list2.append(float((1/float(list1[m])-1)*float(power[m]))) 
      elif float(list1[m]) == 0: 
       list2.append("inf") 
      m+=1 

plot(t, list2) 
plot(list2, t) 

這似乎工作。

+0

謝謝你的嘗試。該代碼大約500行,分爲對象和類,所以我試圖稍微縮寫它。此外,我沒有訪問pylab,只有matplotlib。 List1類似於1700個值,通常爲0.000到0.7500。情節本身是:「plt.plot(arg_x,arg_y,linetype,color = colortype)」其中arg_x == list2在這種情況下。 – Halldinz0r 2014-09-03 08:46:01

+0

對不起,我再次檢查,我有權訪問pylab。代碼仍然會產生相同的錯誤。 – Halldinz0r 2014-09-03 13:43:38

0

它可能不是正確的操作方式,但它似乎工作:

import numpy as np 
np.seterr('ignore') 

瞧。沒有打印警告。如果出現問題,我認爲這可能是一種風險,但從我所看到的情況來看,情況很好。