Сокращение данных графика, не теряя форму графика

У меня есть набор данных с 100 000 точек данных, которые я должен вывести на печать на графике. Получающийся график будет приблизительно 500 пкс шириной, таким образом, для каждого пикселя будет приблизительно 200 точек данных, который кажется довольно ненужным.

Я должен найти способ избавиться от избыточных точек данных, не теряя форму графика для ускорения рендеринга. В настоящее время рендеринг всех 100 000 точек может взять 10 + секунды, поскольку я также использую сглаживание и другие "эффекты".

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

Кто-либо знает о методе, который удовлетворил бы моим потребностям здесь? Язык, который я использую, является PHP, график создается GD, и данные прибывают из MySQL, таким образом, оптимизация некоторым из тех приветствуется.


Данные находятся в этом формате:

Datetime               Value
2005-01-30 00:00:00    35.30
2005-01-30 01:00:00    35.65
2005-01-30 02:00:00    36.15
2005-01-30 03:00:00    35.95
...

И получающийся график в настоящее время похож на это:

сопроводительный текст http://www.ulmanen.fi/stuff/graph-sample.png

11
задан Tatu Ulmanen 14 January 2010 в 08:15
поделиться

6 ответов

Мне кажется, что 1 в 200 довольно серьезная потеря данных, и если те 200 значений, которые должны быть представлены с одним значением на графике, не достаточно близки, чтобы быть значительно замененными со средним числом, у вас есть самостоятельно проблема. Если среднее число не достаточно хорошо, необходимо найти, что критериум говорит, какие данные являются более значительными и должны быть включены, и мы не можем помочь вам с ним, потому что мы не знаем, какие данные это, его статистические свойства, или почему любое значение было бы более значительным, чем другой. С теми дополнительная информация возможно, мог быть дан более определенный ответ.

РЕДАКТИРОВАНИЕ: После рассмотрения графика кажется необходимостью в и минимуме и в максимуме в данном интервале потому что темно-синей областью являются значения между теми двумя, корректными? Возможно, можно принять 100 значений и сделать график из минимума, максимума и среднего числа, так, чтобы каждое мнение в графике было высказано с 6 вместо 200 значений или чего-то как этот.

9
ответ дан 3 December 2019 в 03:18
поделиться

Одним из подходов к вашей проблеме является максимальное уничтожение; Я предлагаю вам Google для определения и алгоритма, у меня нет ни в руку, либо я бы поделился с вами.

Помимо того, что я думаю, что вы можете использовать фильтр с низким уровнем прохода (противоскользящий псевдонима), с которым следует простые децимации (т.е. выбросить предельные точки).

2
ответ дан 3 December 2019 в 03:18
поделиться

Я не знаю, как выглядит ваш код / ​​источник данных, но возможно ли сделать отдельные на вашем выборе MySQL SELECT Чтобы уменьшить количество точек данных, возвращаемых к вашему приложению?

0
ответ дан 3 December 2019 в 03:18
поделиться

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

2
ответ дан 3 December 2019 в 03:18
поделиться

Я думаю, что обычного среднего из каждых 200 пунктов было бы достаточно.

1
ответ дан 3 December 2019 в 03:18
поделиться

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

Чтобы уменьшить количество отображаемых точек, не влияя на форму графика, мы используем алгоритм Рамера-Дугласа-Пекера . Разница формы между несжатым графом и графом с этим алгоритмом незаметна.

14
ответ дан 3 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: