С Matplotlib, если у меня есть f (x) и g (x), как я могу построить g как функцию от f или наоборот? - PullRequest
1 голос
/ 26 апреля 2020

Допустим, у меня есть алгоритм, который оценивает значение во времени (x), f (x) - ошибка оценки. У меня также есть g (x), который должен указывать, насколько хорош / перспективен x для выполнения оценки, например, чем выше g (x), тем ниже f (x), назовем это соответствие.

В основном Я могу построить f (x) и g (x), вызвав, например:

ax0.plot(time, f_data, 'g-', label='f over time')
ax0.plot(time, g_data, 'g-', label='g over time')

. Я могу сравнить эти два графика, насколько хороша корреляция между f и g, но я хочу быть в состоянии построить одно в зависимости от другого, в основном то, что я хотел бы получить, отобразив ошибку оценки как функцию пригодности, является несколько линейной убывающей функцией.

Как я могу это сделать? Я не могу просто сказать f_data.sort () и g_data.sort (). Что мне нужно, это отсортировать g_data (пригодность) и заставить f_data «следовать» в том же порядке. То есть, имейте g_data, в то же время сохраняя, что g_data [i] и f_data [i] все еще сохраняют одно и то же время (x).

Хотя результат является более математическим, я чувствую, что основная проблема здесь заключается в выполнении этого сортировать правильно, или, может быть, есть более простой способ получить это с помощью matplotlib.

Спасибо за ваше время.

1 Ответ

1 голос
/ 26 апреля 2020

Похоже, вы говорите о параметрах c кривых . Чтобы построить их, вам нужно сгенерировать f[i] и g[i], где каждый элемент в последовательности имеет одинаковое значение параметра; тогда вы сможете сказать, что когда f имеет значение f[101] g будет иметь значение g[101].

Класси c f (t) = cos (t) и g (t) = sin (t) :

enter image description here

t = np.linspace(0, 2*np.pi, 50)
f = np.cos(t)
g = np.sin(t)

plt.plot(f, g)
plt.xlabel("f")
plt.ylabel("g")

Как вы предполагаете в своем вопросе, эти типы графиков очень полезны для наблюдения взаимосвязи между двумя значениями.

Например, скажем, f сдвинут по фазе, поэтому он больше выровнен с g , тогда вы получите

t = np.linspace(0, 2*np.pi, 50)
f = np.cos(t + .45*np.pi)  # shift the phase of f
g = np.sin(t)

enter image description here

(На рассмотрении, на этом изображении, я только что заметил, что в этом примере я сместил фазу неправильно, поэтому кривые не "более выровнены", как я планировал, но становятся анти-выровненными, поэтому пики f появляются ближе к впадинам g . Если бы они были более выровнены, кривая имела бы положительный наклон вверх и вправо.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...