universitaria sirve que para necesita laboral grafico estudiar diseño demanda cuesta cuanto conviene carrera .net rendering graph-theory directed-graph graph-layout

.net - necesita - para que sirve el diseño grafico



¿Qué opciones están disponibles para el diseño de gráficos dirigidos o no dirigidos en.NET? (14)

Cuando realicé un trabajo que incluía gráficos el verano pasado, encontré que la mejor opción que no era demasiado costosa era hacerlo manualmente en SVG, es decir, escribir un archivo SVG a partir de un conjunto de cadenas y renderizarlo en una imagen usando Inkscape.

Esta no es una solución rápida y fácil, pero permite una personalización casi infinita, por lo que podría ser bueno si tiene que organizar los gráficos o hacer una organización espacial basada en conexiones, etc.

Por gráfico aquí me refiero a algo que se asemeja a estas imágenes:

La solución ideal sería:

  • usar solo código administrado
  • permitir salida a una imagen de mapa de bits
  • permitir salida a elementos WPF
  • incluir algún tipo de superficie interactiva para mostrar el gráfico que admite zoom, panorámica y reorganización de nodos

También me interesa escuchar acerca de proyectos que potencialmente podrían usarse como punto de partida para este tipo de trabajo. Si requiere algo de desarrollo para lograr lo que quiero, entonces estoy preparado para enfrentarlo. La parte más compleja de este objetivo parece ser obtener el diseño del gráfico en un marco de tiempo razonable.


Estoy trabajando en el equipo NDepend y confirmo: cambiamos de GraphViz a MsAgl en septiembre de 2008 y también la licencia MsAgl permite la utilización comercial. Aquí hay algunas imágenes de muestra de gráficos MsAgl integrados en NDepend (todo es interactivo, los nodos son movibles / seleccionables / extraíbles / seleccionables, los bordes son editables / seleccionables / extraíbles / seleccionables, el diseño es ampliable y también, aunque podría ser más limpio la API de MsAgl es lo suficientemente limpia como para trabajar con ella):


Graphviz sigue siendo hoy, en mi opinión, una de las mejores bibliotecas de gráficos que hay. Sin embargo, integrarlo en .Net es un dolor.

Es posible llamar a la herramienta de línea de comando para generar una salida de forma basada en la entrada de su gráfico, luego lee la salida y coloca los elementos en un control personalizado que muestra las formas que graphviz ha calculado. Es muy raro, pero es la mejor manera que nuestro equipo ha encontrado de integrar graphviz con .Net hace algunos años.

Una mejor solución podría existir hoy; en ese momento GLEE todavía era muy embrionario y no he visto el progreso que Microsoft hizo desde ese momento.


He estado jugando en GLEE / MSAGL y el diseño real per se es suficiente para lo que necesito, sin embargo, me gustaría poder tener más control sobre lo que realmente está dentro de los nodos en lugar de solo un valor único como ahora.

Por ejemplo, me gustaría tener "detalles" que estén ocultos hasta que haga clic en un expansor en el nodo, o haga doble clic en el nodo o desplace el mouse con el mouse.

Suponiendo que GLEE no puede hacer esto, ¿hay alguna solución pura de .NET disponible que pueda hacerlo?


He usado MsAgl y es bastante bueno. También tiene visores para WinForms y WPF que pueden o no ser importantes para usted. Uno no tiene que usar los visores, ya que están muy poco relacionados con el motor de diseño de gráficos.

No es compatible con todo lo que Graphviz hace (especialmente en términos de algunos tipos de formas). Además, la documentación podría ser mejor, pero es bastante sólida si no el producto MS más pulido de la historia.

Marca todos los elementos que menciona como requisitos, aunque la reorganización "en el visualizador" simplemente admite nodos de desplazamiento de arrastre, bordes de reenrutamiento y etiquetas de cambio de posición. El gráfico no responde a los movimientos de estos elementos reposicionando ningún otro elemento.


He usado NodeXL, http://www.codeplex.com/NodeXL , que es una biblioteca .Net 3.5 (pero también un complemento de Excel). NodeXl está desarrollado por Microsoft Research y es bastante ingenioso: tiene algoritmos de visualización y algunas métricas, pero aún se encuentra en sus primeras etapas de desarrollo. Si tienes un desarrollador de .Net experimentado, definitivamente lo echaré un vistazo.

Sin embargo, si conoces Python, definitivamente recomendaría Networkx y su primo pygraphviz, que es una interfaz para Graphviz. He usado ambos y mi productividad con Python / Networkx es mucho más alta que cuando estaba usando NodeXL.

GLEE es la biblioteca de código cerrado de Microsoft que solo puede usar gratis en software no comercial, mientras que NodeXL es la forma de código abierto de Microsoft, pero puede usarlo libremente en un producto que desarrolle.




Microsoft Research proporciona una herramienta llamada MSAGL (Automatic Graph Layout, anteriormente llamada GLEE) para .NET.

MSAGL está disponible aquí: http://research.microsoft.com/en-us/downloads/f1303e46-965f-401a-87c3-34e1331d32c5/default.aspx

Descargo de responsabilidad: No he utilizado la herramienta, así que no sé si es adecuada para usted (y tampoco sé sobre las condiciones de la licencia, parece que es solo para aplicaciones no comerciales). Pero al menos parece interesante.


No es .NET, sino un conjunto de herramientas a menudo referenciado para representar gráficos es AT & T Graphviz . Solo he usado las aplicaciones autónomas, pero el código fuente está disponible bajo una licencia de código abierto.

Graphviz es utilizado por la popular herramienta de documentación de código doxygen para dibujar automáticamente varios diagramas para su documentación generada.


Solo para completar la lista de opciones: Graphviz4Net es una implementación de código abierto de lo que Coincoin ha sugerido en su respuesta.


Utilice QuickGraph para generar archivos Dot para GraphViz . Lo hice en un proyecto reciente, y parece funcionar bastante bien. Mire aquí el código de muestra para analizar archivos .plain, o use mi proyecto here como referencia solo para generar imágenes .png.


Graph# es también otra opción. No lo he usado personalmente, pero he tenido la intención de revisarlo.


Northwoods ofrece una solución .NET pura en su producto GoLayout . Ofrecen un árbol, fuerza dirigida y un dígrafo en capas (que no es exactamente un efecto Sujiyama, pero no está muy lejos para muchos, si no para la mayoría de los conjuntos de datos). A $ 1790 / asiento es caro. También existen algunas limitaciones: lo más importante es que sus implementaciones están diseñadas para gráficos "legibles por humanos". Le di conjuntos de datos de más de 5.000 nodos y no tuve problemas, pero también puedo generar conjuntos de datos de menos de 500 nodos que hacen que tenga un desbordamiento de la pila (recursividad demasiado profunda). Dependiendo de su dominio, puede (o no) ser una buena opción. Si necesita un paquete de diseño general que maneje cualquier conjunto de datos, sugeriría GraphViz sobre Northwoods.

Aún no he usado ninguna de sus capacidades de WPF, pero sé que las tienen. He estado usando sus cosas en WinForms land por un tiempo.