Python + GNU Plot: работа с пропущенными значениями - PullRequest
3 голосов
/ 01 февраля 2011

Для ясности я выделил свою проблему и использовал небольшой, но полный фрагмент для ее описания.

У меня есть куча данных, но пропущено много фрагментов.Я хочу игнорировать их (разрыв в графике, если это был линейный график).Я установил "?"быть символом пропущенных данных.Вот мой фрагмент:

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.

Что не так?

1 Ответ

4 голосов
/ 01 февраля 2011

Gnuplot вызывает numpy.asarray, чтобы преобразовать ваш список Python в пустой массив. К сожалению, эта команда (с 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.

Кроме того, модуль Python Gnuplot (версия 1.7) документ скажем

  • Нет положений о пропущенных точках данных в массиве данных (что gnuplot позволяет с помощью команды 'set missing').

Я не уверен, что это было исправлено в версии 1.8.

Как вы женаты на гнуплоте? Вы пробовали matplotlib ?

...