Рисование двумерных графиков точки

У меня есть список объектов (вероятно, не больше чем 100), где каждый объект имеет расстояние до всех других объектов. Это расстояние является просто добавленной абсолютной разностью между всеми полями эти объекты доля. Могли бы быть немногие (один) или много (десятки) полей, таким образом размерность расстояния не важна.

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

Каков был бы хороший алгоритм для преобразования сети расстояний в 2D распределение точки? Идеально, я хотел бы, чтобы небольшое изменение сети расстояния привело к небольшому изменению в диаграмме, так, чтобы возрастающий прогресс мог просматриваться как гладкое изменение со временем.

Я сделал небольшой пример вида результата, который я ищу: Пример Графический http://en.wiki.mcneel.com/content/upload/images/GraphExample.png

Любые идеи, значительно ценившие, David


Править:

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

сопроводительный текст http://en.wiki.mcneel.com/content/upload/images/ParticleCloudSolution.png

Я могу отправить код C#, если кому-либо интересно (существует довольно многое из него печально),

5
задан David Rutten 15 January 2010 в 23:04
поделиться

3 ответа

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

2
ответ дан 15 December 2019 в 01:02
поделиться

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

Я думаю, что вам нужно немного читать в кластерный анализ, потому что есть алгоритмы для сортировки ваших точек в кластеры на основе метрики связанного с ними, а затем вы можете использовать графики или что-то подобное, чтобы нарисовать результаты. http://en.wikipedia.org/wiki/Cluster_analysis

Один мне очень нравится, это минимальный вырезанный алгоритм разбиения », см. Здесь: http://en.wikipedia.org/wiki / Cut_ (graph_theory)

1
ответ дан 15 December 2019 в 01:02
поделиться

Возможно, вы захотите гугл для таких условий, как:

  • Автоматический макет графов; и
  • алгоритмы на основе сил.

Graphviz выполняет некоторые из этих алгоритмов, не уверен, что он включает в себя какие-либо полезные для вас.

Одно предупреждающее примечание - для некоторых алгоритмов небольшие изменения в вашем содержании графика могут привести к очень большим изменениям на графике.

1
ответ дан 15 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

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