Интерполяция между двумя значениями с использованием Python - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь выполнить линейную интерполяцию в Python из графика, у которого есть значения координат, скажем (x1, y1) и (x2, y2).В соответствии с моими значениями я получу прямую линию на графике , как на этом рисунке

Моя цель в 10 ^ 6 (значение по оси X) должно датьмне значение параметра на оси у, но в настоящее время я получаю экстраполирующее значение не на линии.

Обязательный вывод: Требуется OUtput

Я пытался с нижеКод

import matplotlib.pyplot as plt
import math
import numpy as np


x = np.array([1, 10000000])
y = np.array([0.65, 0.25])
BK = np.asarray(np.interp(0.7,x,y))
print("aa:",BK)
plt.xscale("log")
plt.plot(x,y)
plt.plot(1000000,BK, marker="o",markersize=10)
plt.plot([1000000,1000000,0],[0,BK,BK], "b--", linewidth=1)
plt.xlim(1, 100000000)
plt.ylim(0, 1)
       
plt.show()

1 Ответ

0 голосов
/ 09 марта 2019

Обратите внимание, что линия, нарисованная на диаграмме, совершенно не связана с данными, потому что это линия на диаграмме, а не координаты данных. Следовательно, интерполяция этой строки имеет нулевое значение!

Если вы все еще хотите интерполировать эту строку, вам сначала нужно преобразовать ее в пространство журнала:

import matplotlib.pyplot as plt
import numpy as np


x = np.array([1, 10000000])
y = np.array([0.65, 0.25])

xinp = 1e6
BK = np.asarray(np.interp(np.log(xinp), np.log(x), y))
print("aa:",BK)

plt.xscale("log")
plt.plot(x,y)
plt.plot(xinp, BK, marker="o",markersize=10)
plt.plot([1000000,1000000,0],[0,BK,BK], "b--", linewidth=1)
plt.xlim(1, 100000000)
plt.ylim(0, 1)

plt.show()

enter image description here

...