Визуализируйте двудольный граф

Может ли кто-нибудь порекомендовать библиотеку или код для визуализации двудольных графов на С#?

Graph#, кажется, не поддерживает этот тип графа напрямую (но имеет некоторую поддержку для распутывания вершин).

Я хочу создать такую ​​графику, как двудольный график с некоторым текстом в узлах. Узлы одинаковой ширины и высоты были бы идеальными.

Элемент управления WPF был бы идеальным, поскольку он существует для графа #. Возможно, даже существует определение XAML? В качестве альтернативы: окно отчета также может быть очень хорошим.

Вероятно, кто-то с большим опытом работы с Graph# может подсказать, как это сделать с помощью Graph#.

Пробовал немного с NodeXL, но это кажется не идеальным решением, так как узлы, похоже, не так сильно модифицируются. Возможно, кто-то может предложить лучшее решение. Поиграли с NetworkView, предоставленным Soroush. На данный момент это ближе всего к тому, что я хочу.

-update- Пробовал NetworkView, которым поделился Соруш Фалахати. Это кажется хорошей базой, но пока не такой гибкой, как мне нужно. У меня есть проблемы с тем, чтобы поверить, что нет никакой библиотеки, которая может делать такие вещи из коробки. (NetworkView имеет отличную функцию для установки соединений / ребер в элементе управления, что дает ему дополнительный импульс по сравнению с NodeXL). Возможно, Graph# может сделать еще больше, но на данный момент я попробовал только эти два.


person Mare Infinitus    schedule 30.01.2013    source источник
comment
Я думаю, что нет (управление wpf). Кажется, вам нужно написать это самостоятельно. :)   -  person Soroush Falahati    schedule 01.02.2013
comment
Так как я тоже ничего не нашел, я спросил здесь. Написать его самому можно, но это всего лишь маленькая забава в текущем проекте, и я не хочу тратить на это слишком много времени. Если есть, то воспользуюсь, если нет, то напишу позже (месяца через три-четыре, думаю, найду время)   -  person Mare Infinitus    schedule 01.02.2013
comment
Возможно, некоторые из этих вещей помогут вам: codeproject.com/Articles/ 23871/WPF-Diagram-Designer-Part-3 или nwoods.com/components/silverlight-wpf/goxam-overview.htm или mindscapehq.com/ products/wpfdiagrams или mindfusion.eu/wpfdiagram.html или codeproject.com/Articles/182683/ на самом деле ни один из них не создан для этого предложения, но они могут вам помочь.   -  person Soroush Falahati    schedule 01.02.2013
comment
Кажется, это полезно, когда я начинаю писать это самостоятельно. Спасибо!   -  person Mare Infinitus    schedule 01.02.2013
comment
@Soroush Falahati: Поскольку ваш комментарий сейчас наиболее полезен, предоставьте его в качестве ответа.   -  person Mare Infinitus    schedule 03.02.2013
comment
Я опубликую это, но сначала посмотрим, сможет ли @edallme помочь вам лучше или нет. :)   -  person Soroush Falahati    schedule 03.02.2013
comment
@SoroushFalahati Пожалуйста, восстановите свой ответ. На данный момент NetworkView — это то, что ближе всего к тому, что я хочу. Я считаю, что я буду использовать его в качестве базы, когда мне придется реализовать его самостоятельно.   -  person Mare Infinitus    schedule 05.02.2013
comment
На самом деле один из модераторов удалил его, потому что в нем нет ничего, кроме ссылок на другие места. Так что забудь, я не могу его восстановить. :)   -  person Soroush Falahati    schedule 05.02.2013
comment
Поскольку это по-прежнему самый ценный ответ, я действительно хотел бы вознаградить вас за награду. Возможно, вы можете дать другой ответ. NodeXL все еще существует, но я считаю, что заставить что-то работать с ним намного сложнее, чем с NetworkView.   -  person Mare Infinitus    schedule 05.02.2013
comment
@Mare Infinitus, что вы подразумеваете под способностью NetworkView устанавливать соединения / ребра в элементе управления?   -  person edallme    schedule 06.02.2013
comment
Пользователь имеет возможность перетаскивать от одного узла к другому, чтобы создать ребро. Это действительно смешно.   -  person Mare Infinitus    schedule 06.02.2013


Ответы (6)


Вы можете аппроксимировать визуализацию двудольного графа в NodeXL и даже улучшить ее, удалив пересечения ребер. Я взял ваш образец двудольного графа и на изображении ниже раскрасил узлы рядом с ними (u или v). Они расположены с использованием алгоритма Сугиямы, который сводит к минимуму пересечение краев. Я сделал это в интерактивном шаблоне NodeXL для Excel 2007–2013, но все эти функции должны быть доступны в виде автономных библиотек классов NodeXL C# и WPF. Текущие библиотеки на момент публикации доступны для загрузки здесь.

Двудольный граф в макете NodeXL Sugiyama

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

Двудольный граф NodeXL

Отказ от ответственности: я являюсь консультантом проекта NodeXL.

person edallme    schedule 03.02.2013
comment
Этот действительно хорош! Надо посмотреть повнимательнее! Большое тебе спасибо! Кстати: можно ли поместить текст в узлы? Или хотя бы рядом с узлами? - person Mare Infinitus; 03.02.2013
comment
Абсолютно! Вы можете сделать это вручную, введя правильные ячейки, или есть функция под названием «Столбцы автозаполнения», где вы можете создать метку из любого другого столбца данных, который у вас есть в таблице. - person edallme; 03.02.2013
comment
Я почти уверен, что это так. Если у вас возникли проблемы с его работой или с поиском нужной части кода, опубликуйте сообщение в обсуждении NodeXL. страницу и главный разработчик поможет вам. - person edallme; 03.02.2013
comment
Нашел NodeXLControl, который, кажется, хорошо соответствует тому, что я хочу. А разве нет демонстрационных проектов, чтобы посмотреть, как это работает? - person Mare Infinitus; 03.02.2013
comment
Единственным демонстрационным проектом для NodeXLControl является шаблон NodeXL Excel, который показывает график в окне Excel. Если у вас нет Excel или вы не хотите устанавливать шаблон NodeXL Excel, довольно просто загрузить библиотеки классов NodeXL и попробовать NodeXLControl в своем приложении. Чтобы узнать, как это сделать, перейдите на страницу загрузок NodeXL и найдите последние библиотеки классов NodeXL. релиз в разделе «Другие загрузки». - person edallme; 04.02.2013
comment
Когда вы используете NodeXLControl для встраивания графика в приложение WPF или Windows Forms, вы можете создать так называемую форму метки, которая представляет собой поле с текстом внутри. Вы также можете создавать другие фигуры, такие как диски, квадраты и ромбы, и размещать аннотацию метки рядом с фигурой. - person edallme; 04.02.2013
comment
Имейте эти библиотеки классов, но не так просто получить результаты, когда нет демо и документация не работает. (всегда получайте У вас, кажется, нет подключения к Интернету в части chm). Возможно есть документация получше, но chm не очень. - person Mare Infinitus; 05.02.2013
comment
При попытке просмотра файла NodeXLApi.chm вы можете увидеть только пустые разделы. Чтобы устранить эту проблему, связанную с ограничением безопасности в Internet Explorer, щелкните правой кнопкой мыши файл chm в проводнике Windows, выберите «Свойства» и нажмите кнопку «Разблокировать» на вкладке «Общие». - person edallme; 05.02.2013
comment
Похоже проблема в другом, так как у меня нет кнопки Разблокировать даже в проводнике в режиме администратора. Может быть, что-то для SuperUser;) - person Mare Infinitus; 05.02.2013
comment
Выяснил проблему: это было потому, что я поместил его в папку, содержащую символ # (на самом деле С#)... - person Mare Infinitus; 05.02.2013
comment
Вау, странный баг. Я передам это. - person edallme; 06.02.2013
comment
Это точно. нашел его по этой ссылке здесь blogs.msdn.com/neerajag/ архив/2006/04/26/584144.aspx - person Mare Infinitus; 06.02.2013
comment
Ваш ответ был самым трудоемким, поэтому вы получаете награду. Но в свободное время я немного поиграю с кодовым проектом. Вероятно, NodeXL появится в будущих версиях. - person Mare Infinitus; 07.02.2013

На самом деле, если бы вы могли использовать jquery на стороне клиента, я бы настоятельно рекомендовал jqPlumbs. .org/jquery/demo.html

person Mortalus    schedule 01.02.2013
comment
Никакого jquery, только C# и WPF. Но большое спасибо за ответ! - person Mare Infinitus; 01.02.2013
comment
Неужели нет лучших ответов, чем этот? Этот не приносит никакой помощи... и не должен получить награду. - person Mare Infinitus; 03.02.2013

Хорошо, как хочешь,

Вот пример/библиотека, которая позволяет легко создавать графики и блок-схемы,

http://www.codeproject.com/Articles/182683/NetworkView-A-WPF-custom-control-for-visualizing-a

У него действительно очень хорошие характеристики.

person Soroush Falahati    schedule 05.02.2013
comment
Определенно имеет. Все еще играя с NetworkView, думаю, что это действительно хорошая основа для визуализации двудольных графов. - person Mare Infinitus; 05.02.2013

  1. yFiles WPF — это обширная библиотека классов .NET для приложений Windows Presentation Foundation (WPF). Его первоклассные элементы управления пользовательским интерфейсом для просмотра и редактирования диаграмм позволяют автоматически упорядочивать сложные графики, диаграммы и сети одним нажатием кнопки. Наша библиотека диаграмм, созданная для приложений на основе Windows Forms, называется yFiles.NET.

  2. Graph# — это фреймворк компоновки графа. Он содержит некоторые алгоритмы компоновки и элемент управления GraphLayout для приложений WPF.

  3. Использование WPF для визуализации графика с Циклические зависимости

person zandi    schedule 06.02.2013

Если вы можете сделать это в Windows Forms, вы можете использовать NShape. Поскольку исходный код доступен, вы, вероятно, могли бы перенести его в WPF, если вам это нужно. Это может быть лучше, чем писать его с нуля. Или, возможно, вы могли бы разместить элемент управления WinForms, чтобы получить необходимую вам функциональность. Однако не так хорошо, как чистое решение WPF.

person Katie Kilian    schedule 01.02.2013

D3.js — это библиотека JavaScript для управления документами на основе данных. D3 поможет вам оживить данные с помощью HTML, SVG и CSS. Акцент D3 на веб-стандарты дает вам все возможности современных браузеров, не привязывая себя к проприетарной среде, сочетая мощные компоненты визуализации и подход, основанный на данных, для манипулирования DOM.

D3 позволяет привязывать произвольные данные к объектной модели документа (DOM), а затем применять к документу преобразования, управляемые данными. Например, вы можете использовать D3 для создания таблицы HTML из массива чисел. Или используйте те же данные для создания интерактивной гистограммы SVG с плавными переходами и взаимодействием.

D3 не является монолитной структурой, которая стремится предоставить все мыслимые функции. Вместо этого D3 решает суть проблемы: эффективное управление документами на основе данных. Это позволяет избежать проприетарного представления и обеспечивает исключительную гибкость, раскрывая все возможности веб-стандартов, таких как CSS3, HTML5 и SVG. С минимальными накладными расходами D3 работает чрезвычайно быстро, поддерживает большие наборы данных и динамическое поведение для взаимодействия и анимации. Функциональный стиль D3 позволяет повторно использовать код с помощью разнообразного набора компонентов и плагинов.

http://d3js.org/

http://mbostock.github.com/d3/talk/20111116/force-collapsible.html

person zandi    schedule 05.02.2013
comment
D3 предназначен для визуализации, а не для построения графика. В то время как matplotlib отлично подходит для простого создания графиков качества публикации (с помощью таких вызовов, как pylab.hist(data) для создания гистограммы), D3 является более общим. Основная концепция заключается в том, что вы создаете коллекцию объектов (обычно фигур в формате svg) и привязываете к ним данные. Вы используете данные для управления их свойствами, поэтому вы можете, например. прямоугольники, расположенные вокруг экрана на основе вектора входных данных. D3 немного болезненный для создания простых графиков, но он действительно сияет, когда вы хотите сделать что-то более индивидуальное. - person zandi; 05.02.2013
comment
D3 отлично подходит для анимации и интерактивности: анимация в D3 почти тривиальна. Помните эти прямоугольники? Просто привяжите к ним новый вектор данных и используйте встроенные переходы, чтобы фигуры плавно перемещались в новые позиции (или размеры, цвета и т. д.). Интерактивность обусловлена ​​тем, что D3 реализован в javascript и позволяет выполнять эти переходы в ответ на ввод с клавиатуры или мыши. - person zandi; 05.02.2013
comment
D3 — это волшебство в том, что я могу отправить любому человеку в мире html-файл, и визуализация будет отлично отображаться в его браузере. Единственное предостережение заключается в том, что это должен быть браузер, совместимый с HTML5, CSS3 и встроенным javascript (что делает любую последнюю версию Firefox, Chrome, Safari или даже Internet Explorer 9+ прекрасной). - person zandi; 05.02.2013
comment
ладно... Я вижу, ты любишь D3. Просто нужно решить проблему с Javascript в WPF, что ли? - person Mare Infinitus; 05.02.2013