Pregunta

Tengo parálisis perfección cuando se trata de producir algo gráfico. Si simetrías de la visual no se han explorado en su totalidad, no tengo más dificultades para comprender lo que está pasando. Yo soy un aprendiz muy visual, así, y AMO a simplificar las cosas que acabo de aprender y sacar en papel.

Graphviz es una buena herramienta para dibujar cosa de forma automática, pero podría ser mejor. Vamos a empezar con un ejemplo de un buen gráfico) una máquina de estados en lugar). No importa la calidad (se puede volver a dibujar con una mejor herramienta) éste es casi perfecto, excepto que iba a girar en sentido contrario a las agujas del reloj 45 grados para que la simetría aparente. A continuación, debe llevar al lector menos tiempo para averiguar cómo los Estados Q1 y Q2 son similares y cómo en lo que difieren. Sostengo que hay una sola mejor manera de representar ese diagrama, dado que no hay otras piezas de gráfica junto a él.

http://gallery.hd.org/_exhibits/maths/math-finite-state-machine-DHD.gif
(fuente: gallery.hd.org )

Ahora vamos a ver una representación menos que perfecto:

http://linux.softpedia.com/screenshots/Graphviz_1.png
(fuente: softpedia.com )

Esto parece algo un graphviz generaría. Sí, los bordes son lisos, pero esto es innecesario GAAAAWWWD confuso! Parece un mapa mental, no un diagrama terminado listo para el consumo. Creo que los ojos humanos CRAVE simetría (no menos). Sí, la jerarquía, etc., son también factores importantes.

Me sorprende que no son mejores algoritmos disponibles. Algunas personas no son aprendices visuales en absoluto; que pueden comprender conceptos abstractos mediante la lectura de símbolos. No yo!

Así que, ¿cuál es la pregunta? Bueno, ¿hay mejor software libre disponible para dibujar gráficos de pequeño y medio? Tal vez

Gracias!

Quisiera saber cómo puedo mejorar esta entrada.

P.S. Me tomó 10 minutos para sacar un clon bastante similar en diámetro. Todavía no es perfecto, pero era conveniente hacer porque todo encaje a la red (y que se perdió un par de pequeños detalles, pero no tengo ganas de volver a subir). El LR_0 necesita un "Inicio --->" que viene desde arriba para que el usuario sujete el estado inicial antes.

máquina de Estados Finate

¿Fue útil?

Solución

Después de varios intentos de dibujar el gráfico y de no poder conseguir un diseño que usted considere "mejor", se plantea la cuestión aquí: está allí "[b] software libre Etter [de] la elaboración de pequeña a medio-gráficos. " el único criterio que has dado para la evaluación de algoritmos de diseño es lo cerca que llegan a la '[s] mejor manera ingle para representar ese diagrama.' "Mejor", por supuesto, te queda por decidir.

Esto es más o menos lo mismo que tratar de resolver un problema utilizando un lenguaje de programación determinado, en su defecto, y luego pedir un mejor lenguaje de programación.

En el corazón de algoritmos de dibujo gráfico son rutinas de optimización que generan entonces las soluciones de evaluación ( 'solución' se refiere aquí a las coordenadas para cada nodo que en conjunto comprenden una disposición). Esas soluciones se evaluaron de acuerdo con la minimización de un criterio único o una serie de criterios clasificados - es decir, la minimización de uno o más atributos de la gráfica - por ejemplo, el número total de bordes que se cruzan, o la suma de las distancias entre los nodos (o la combinación de ambos, o alguna combinación ponderada de los dos), o la cercanía a una configuración simétrica. Graphviz se compone de seis algoritmos de diseño diferentes (dot neato, fdp, SFDP, DosPi, y circo). De estos, se le aparece de puntos Sólo se utiliza; Sin embargo, DosPi y circo podrían haber sido mejores opciones dadas sus limitaciones estrictas de simetría que parecen coincidir con su propia idea de un gráfico dibujado correctamente.

En segundo lugar, el texto de su pregunta se dirige a "gráficos" y gráfico-dibujo, Después de leer su descripción completa, no creo que su pregunta tiene nada que ver ni con el concepto.

Más allá de los algoritmos de dibujo de gráficos generales (como graphviz), existen una serie de algoritmos de diseño de dominio específico, por ejemplo, diagramas de Hasse (para representar conjuntos parcialmente ordenados en teoría de la orden), Barabasi-Albert gráficos (redes libres de escala ), y Erdos-Renyi (gráficos aleatorios). Cada uno de esos algoritmos produce un diseño gráfico basado en criterios y limitaciones suministradas por el dominio - esto debería indicar a usted que no hay un único "mejor" diseño en todos los dominios. A pesar de que ha utilizado el término "gráfico" en su pregunta, su descripción indica que su problema se refiere a la elaboración de las máquinas de estado - un tipo muy peculiar de gráfico. algoritmos de dibujo de gráficos generales son a menudo pobres en dibujar gráficos especializados de este tipo porque el algoritmo no sabe nada acerca de dominio. De hecho, no estoy al tanto de cualquier algoritmo de diseño de diagramas de estado - al igual que no hay uno para los diagramas de flujo (no es lo mismo, pero similar). En cuanto al flujo de trabajo, puede dibujar el gráfico de la graphviz luego importarlo a Omnigraffle para un ajuste fino - en Omnigraffle, tendrás un control preciso sobre las colocaciones del nodo y del borde

.

Otros consejos

Hay una serie de opciones sé de:

  • Prefuse - Tienen una mayores de Java versión . La nueva versión es Flash y tiene algunos diseños agradables. Se llama Prefuse llamarada . El demostración página ilustra algunas de sus capacidades de diseño.
  • JUNG incluye una serie de opciones de diseño, así como sus potentes funciones de análisis gráfico. Hay algunos ejemplos aquí .
  • NetworkX también incluye numerosas capacidades de diseño. Algunos de ellos se enumeran aquí .

Algunos programas permiten a los usuarios afinando algoritmos de diseño en tiempo real, siempre y cuando el traslado de nodos con el ratón. Este enfoque puede ser de gran ayuda para los gráficos más grandes.

Yo sobre todo sé Gephi (Disclamer: No soy dev)

.

TikZ genera hermosas diseños gráfico . Puede utilizar un diseño manual que le permite especificar el mínimo de pistas, o puede pedir diseño automático. Los valores predeterminados son buenos, y existen ganchos para ajustar a la perfección.

Con la disposición semimanual usted no tiene que declarar todos los detalles, porque se puede

  • declarar nodos como 'por encima de', 'abajo a la derecha de', etc. en relación con otros nodos.
  • Añade los nodos de una trama mediante la introducción de ellos como una matriz:. Muy conveniente si quieres dejar algunas posiciones vacío
  • especificar fácilmente en bordes qué dirección debe entrar, salir, curva, o tomar curvas

En la disposición automática, biblioteca graphdrawing de TikZ tiene alguna bastante algoritmos mancha .

Aquí es un ejemplo de la disposición manual y el código TeX de obtención del mismo:

ejemplo de gráfico

\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,automata}
\usepackage[latin1]{inputenc}
\begin{document}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
                    semithick]
  \tikzstyle{every state}=[fill=red,draw=none,text=white]

  \node[initial,state] (A)                    {$q_a$};
  \node[state]         (B) [above right of=A] {$q_b$};
  \node[state]         (D) [below right of=A] {$q_d$};
  \node[state]         (C) [below right of=B] {$q_c$};
  \node[state]         (E) [below of=D]       {$q_e$};

  \path (A) edge              node {0,1,L} (B)
            edge              node {1,1,R} (C)
        (B) edge [loop above] node {1,1,L} (B)
            edge              node {0,1,L} (C)
        (C) edge              node {0,1,L} (D)
            edge [bend left]  node {1,0,R} (E)
        (D) edge [loop below] node {1,1,R} (D)
            edge              node {0,1,R} (A)
        (E) edge [bend left]  node {1,0,R} (A);
\end{tikzpicture}
\end{document}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top