Excel. Долгая дорога оцифровки. Часть 2. Забираем данные с листа
Под оцифровкой графиков будем понимать получение интерполяционной/аппроксимирующей функции (макроса), при вводе данных в которую будет получено значение, соответствующее значению, полученному с использованием графического метода (линейка и карандаш) на бумажном варианте графика-рисунка.
Первым этапом оцифровки будет получение набора данных XY соответствующих имеющейся кривой.
Некоторые РД (документация заводов-изготовителей, НТД, ТЭХ, ТНХ и т.д) предоставляют функции/уравнения, соответствующие графикам/номограммам. Однако стоит знать, что иногда предоставленная функция может не соответствовать предоставленному графику и требует проверки.
До проведения "снятия" точек требуется обработать отсканированный (если он таковой) график. А именно:
- максимально уменьшить искажения типа "горб" или "рыбий глаз. Т.е. сделать все вертикальные и горизонтальные линии параллельными между собой соответственно.
- максимально сделать перпендикулярными вертикальную и горизонтальную оси.
Всё это выполняется или в специализированных программах типа того же FineRader, или в пэйнте. От того насколько подготовите файл будет зависеть как потом точки будут отображаться на графике в Excel, а там, как известно, всё строго перпендикулярно.
В далёком прошлом помню варианты "снятия" точек путём вставки картинки в автокад, простановки точек, их переписывания и пересчёта... Сейчас же при отсутствии функций-зависимостей следует воспользоваться программой Graph2Digit, GetData Graph Digitizer или аналогичной. GetData Graph Digitizer продаётся за денежку, но т.к. я начинал работать с ней, она установлена у меня на работе (а у нас нельзя самому ставить софт), то показывать буду на ней. Но тут скорее дело привычки, и пары удобств, которых не помню в Graph2Digit - типа возможности снятия точек с нескольких линий.
При этом автоматизированность снятия точек хоть и заявлена для обеих программ, но на деле ни одна программа с этим не справляется на реальных диаграммах - требуется идеальный вариант с чётким выделением линий графиков по цветам, отсутствием сеток и наличия бубна. Фактически для реальных графиков "снятие" точек производится в ручном режиме.
Для желающих - выбираем язык программы.
1. Установить оси. Потребуется установить точки минимального Х, максимального Х, минимального У, максимального У. При этом, как видно на скриншоте выше, достаточно установить точки там, где заведомо известны значения. Например максимальный Х задан как 400, хотя график продолжается и далее - значение по осям будут пересчитаны соответственно.
2. Ручная простановка точек. В ручном режиме наводится на место снятия точки, при этом в увеличенном виде это место отображается справа в нижнем углу, и ЛКМ фиксируем точку. Все снятые точки отображаются в таблице справа.
3. Копирование снятых точек в буфер обмена. В дальнейшем "снятые" точки копируются в лист Excel, и с ними производятся различные манипуляции.
Это был описаны основные действия при ручном снятии.
Основные вопросы:
Насколько часто требуется производить "снятие" точек? Вопрос сложный... Но из опыта - линия, что связывает две проставленные точки, в идеале должна находиться внутри линии графика.
Что делать, если был не верно указан диапазон (например вместо Хмакс=1000 записали Хмакс=100)? Ничего страшного. Точки заново расставлять вдоль линии не надо, достаточно зайти в "Текущее состояние" - "Параметры" и задать правильное параметров осей.
Несколько советов:
- сохранять поле снятых точек. т.е. файл *.gdw. В дальнейшем, если обнаружится не верное отображение точек, легко проверить правильность указания осей. Дело в том, что если график один, то точки снимаются внимательно, и аккуратно. А когда ставится на поток, по 50 графиков в час, то бывают и плюхи...
- выставлять следующие настройки (в дальнейшем облегчат автоматическое получение макросов):
- немного забегая вперёд (постов эдак на 4). снятие точек производить от меньшего Х к большему. При наличии диаграммы зависимости от двух аргументов типаY(X1, X2) начиная с графика меньшего Х2.Т.е. см.диаграмму внизу - имеется зависимость qт(Nт,Qт). Снятие точек начинаем с Qт=0, Nт = 40... 120, затем с Qт=20, Nт = 40... 120 и т.д. С обязательным условием - каждая следующая линия должна начинаться с Х меньшего, чем закончилась предыдущая... Может немного сумбурно, но если понятней по видео, то вот - https://youtu.be/AXnTdHlmn34
- Нужно помнить, что погрешность оцифровки составляет толщину линии, и для вертикальных участков кривых может достигать 2%. Дополнительная погрешность вызывается искривлением графика при печати/сканировании. Поэтому точки, полученные в результате такого снятия можно, и подчас нужно, редактировать. Например, если Вы точно знаете что при Х=10 Y должен ровняться 20, а по снятым данным выходит 19.95, то или производится правка данной точки (заменяется на 20), или все точки поднимаются на 0,05 (+0,05).
При этом точность определения значений с помощью линейки и карандаша заведомо ниже, чем при использовании интерполированных кривых.
===========
Краткий план:
Теория вкратце [ Часть 1. ]
Забираем данные с листа. [ Часть 2. ] Этот пост
Апроксимация простых графиков полиномом средствами Excel [ Часть 3.]
Макрос по созданию макросов апроксимации простых графиков полиномом [ Часть 4.]
Апроксимация графиков двух аргументов полиномом [ Часть 5.]
Кусочная интерполяция простых графиков [ Часть 6.]
....