#python #matplotlib #plot #line
#python #matplotlib #график #строка
Вопрос:
У меня есть две строки (x, y), сохраненные как dicts:
# DICT = { time : voltage }
line1 = { 1.2 : 500, 1.4 : 600, 1.6 : 700}
line2 = { 1.3 : 550, 1.5 : 650, 1.7 : 750}
Я хочу наблюдать различия между строками, но когда я просто строю график:
plt.plot(line1.keys(), line1.values())
plt.plot(line2.keys(), line2.values())
plt.show()
Масштаб таков, что незначительные различия между строками не видны. Я хотел бы вычесть строки друг из друга, чтобы создать 3-ю строку, которая представляет эти различия. Если ключи совпадают идеально, я мог бы сделать что-то вроде:
line3={}
for k in line1.keys():
line3[k] = line1[k] - line2[k]
К сожалению, ключи (x-значения) не совпадают в обоих dicts. Как мне следует вычитать эти две строки друг из друга?
Комментарии:
1. Если вы используете python3.7 , то ключи dict сохраняют порядок вставки, что может помочь с тем, что вы хотите ?.
Ответ №1:
В основном у вас есть x1, y1 и x2, y2. Чтобы выполнить значимое вычитание, вам нужно будет иметь общий x. Практика заключается в повторной выборке одного из сигналов в соответствии с другими x.
numpy.interp может это сделать. Например
new_y2 = np.interp(x1, x2, y2)
d = new_y2 - y1 # both over x1
Комментарии:
1. Я новичок
np.interp()
, но, основываясь на моем понимании того, что происходит в этой теме, я считаю, что было бы более целесообразно переименоватьnew_y2
asnew_y1
, поскольку это, вероятно, значения, основанные на интерполяцииy
, для значений,x
которые находятся внутриx1
. Или я все неправильно понял в этом потоке?2. Нет. Мы передискретизируем y2 на x1. Пожалуйста, взгляните numpy.org/doc/stable/reference/generated/numpy.interp.html
Ответ №2:
Для меня это звучит так, как будто у вас есть данные с разной частотой дискретизации / отметками времени.
В зависимости от имеющихся у вас данных вы можете попытаться использовать их относительную временную метку из первого элемента — если они имеют одинаковую частоту дискретизации:
#with 1.2, 1.3 == value of your first timestamp
d1_rel = {key - 1.2: value for key, value in d1.items()}
d2_rel = {key - 1.3: value for key, value in d2.items()}
в противном случае, если ваши данные имеют другую частоту дискретизации:
Библиотека «pandas» может быть вашим другом. Взгляните на метод повторной выборки: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.resample.html#pandas-dataframe-resample