Использование Pylab для создания графика линии, а затем получение растеризованных данных из линии - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь получить растеризованные данные строки из функции графика Pylab.Мой код выглядит так:

fitfunc = lambda p, x: p[0] + p[1] * sin(2 * pi * x / data[head[0]].size + p[2])
errfunc = lambda p, x, y: fitfunc(p, x) - y

data = np.genfromtxt(dataFileName, dtype=None, delimiter='\t', names=True)

xAxisSeries =linspace(0., data[head[0]].max(), data[head[0]].size)

p0 = [489., 1000., 9000.] # Initial guess for the parameters
p1, success = optimize.leastsq(errfunc, p0[:], args=(xAxisSeries, data[head[1]]))

time = linspace(xAxisSeries.min(), xAxisSeries.max(), 1000)

plotinfo = plot(time, fitfunc(p1, time), 'r-')

Я хочу получить данные строки x и y из plotinfo.Когда я использую «type (plotinfo)», plotinfo - это список, но при использовании «print plotinfo» - это объект 2dlist.

1 Ответ

1 голос
/ 20 октября 2011
import numpy as np
import matplotlib.pyplot as plt
N=4
x=np.linspace(0, 10, N)
y=np.cumsum(np.random.random(N) - 0.5)
line=plt.plot(x,y)[0]
path=line._path

Это исходные (x, y) точки данных:

print(path.vertices)
# [[  0.           0.08426592]
#  [  3.33333333   0.14204252]
#  [  6.66666667   0.41860647]
#  [ 10.           0.22516175]]

Здесь мы (линейно) интерполируем, чтобы найти дополнительные точки.Вы можете увеличить аргумент до path.interpolated, чтобы найти больше интерполированных точек между исходными точками.

path2=path.interpolated(2)
print(path2.vertices)
# [[  0.           0.08426592]
#  [  1.66666667   0.11315422]
#  [  3.33333333   0.14204252]
#  [  5.           0.2803245 ]
#  [  6.66666667   0.41860647]
#  [  8.33333333   0.32188411]
#  [ 10.           0.22516175]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...