2011-02-01 23 views
3

わかりやすくするために、私は問題を切り分け、小さく完全なスニペットを使って説明しました。Python + GNU Plot:欠損値の扱い

私にはたくさんのデータがありますが、欠けている部分がたくさんあります。私はこれらを無視したい(それが折れ線グラフの場合はグラフの中断)。私は "?"欠落しているデータのシンボルになります。

import math 
import Gnuplot 

gp = Gnuplot.Gnuplot(persist=1) 
gp("set datafile missing '?'") 

x = range(1000) 

y = [math.sin(a) + math.cos(a) + math.tan(a) for a in x] 

# Force a piece of missing data 
y[4] = '?' 

data = Gnuplot.Data(x, y, title='Plotting from Python') 
gp.plot(data); 

gp.hardcopy(filename="pyplot.png",terminal="png") 

しかし、それは動作しません:ここに私の抜粋です

> python missing_test.py 
Traceback (most recent call last): 
    File "missing_test.py", line 8, in <module> 
    data = Gnuplot.Data(x, y, title='Plotting from Python') 
    File "/usr/lib/python2.6/dist-packages/Gnuplot/PlotItems.py", line 560, in Data 
    data = utils.float_array(data) 
    File "/usr/lib/python2.6/dist-packages/Gnuplot/utils.py", line 33, in float_array 
    return numpy.asarray(m, numpy.float32) 
    File "/usr/lib/python2.6/dist-packages/numpy/core/numeric.py", line 230, in asarray 
    return array(a, dtype, copy=False, order=order) 
ValueError: setting an array element with a sequence. 

間違って起こっているのか?

答えて

4

GnuplotはPythonリストをnumpy配列に変換するためにnumpy.asarrayを呼び出しています。 残念ながら、このコマンド(dtype=numpy.float32)は、文字列を含むPythonリストと互換性がありません。

あなたはこのようなエラーを再現することができます

In [36]: np.asarray(['?',1.0,2.0],np.float32) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 

/usr/lib/python2.6/dist-packages/numpy/core/numeric.pyc in asarray(a, dtype, order) 
    228 
    229  """ 
--> 230  return array(a, dtype, copy=False, order=order) 
    231 
    232 def asanyarray(a, dtype=None, order=None): 

ValueError: setting an array element with a sequence. 

さらに、Gnuplot python module (version 1.7) docsは gnuplotは経由で可能になる(配列データ内のデータポイントを逃すための規定がありません

  • 言います'set missing'コマンド)。

これがバージョン1.8で修正されているかどうかはわかりません。

あなたはgnuplotとどのように結婚していますか? Have you tried matplotlib