Question

J'ai la paralysie de la perfection en matière de produire quelque chose de graphique. Si symétries du visuel n'a pas été pleinement explorées, j'ai plus de mal à comprendre ce qui se passe. Je suis un apprenant très visuel aussi bien, et j'aime simplifier les choses que je viens d'apprendre et de les dessiner sur du papier.

Graphviz est un bel outil pour dessiner chose automatiquement, mais il pourrait être mieux. Commençons par un exemple d'un bon graphique) une machine d'état plutôt). Peu importe la qualité (il peut être redessinée avec un meilleur outil) celui-ci est presque parfait, sauf que je tournerais dans le sens antihoraire de 45 degrés pour faire la symétrie apparente. Il faut alors prendre le lecteur moins de temps pour comprendre comment les états q1 et q2 sont similaires et comment ils diffèrent où. Je soutiens qu'il ya une meilleure façon de représenter ce diagramme, étant donné qu'il n'y a pas d'autres morceaux de graphique à côté.


(source: gallery.hd.org )

Maintenant, regardons une description très parfaite:


(source: softpedia.com )

Cela ressemble à quelque chose d'un graphviz générerait. Oui, les bords sont lisses mais GAAAAWWWD cela est inutile confusion! Il ressemble à une carte de l'esprit, pas un schéma fini prêt à la consommation. Je crois que les yeux humains symétrie CRAVE (pas moins). Oui, la hiérarchie, etc. sont également des facteurs importants.

Je suis surpris qu'il n'y a pas de meilleurs algorithmes disponibles. Certaines personnes ne sont pas des visuels du tout; ils peuvent saisir des concepts abstraits en lisant les symboles. Pas moi!

Alors, quelle est ma question? Eh bien, est-il un logiciel libre disponible pour mieux dessiner des graphiques de petite à moyenne? Peut-être

Merci!

Faites-moi savoir comment je peux améliorer ce poste.

P.S. J'ai pris 10 minutes pour dessiner un clone assez similaire dia. Il est pas encore parfait, mais il était commode de faire parce que tout se mette au réseau (et j'ai raté quelques petits détails, mais ne se sentent pas comme réimportation). Le LR_0 a besoin d'un « Démarrer ---> » venant d'en haut pour permettre à l'utilisateur de saisir l'état de départ plus tôt.

Était-ce utile?

La solution

Après plusieurs tentatives de dessin de votre graphique et de ne pas obtenir une mise en page que vous jugez « meilleur », vous a posé la question ici: est là « [b] le logiciel libre Etter [pour] dessin petite à moyen graphiques. " le seul critère que vous avez donné pour l'évaluation des algorithmes de mise en page est à quel point ils viennent à la « [s] meilleure façon de représenter Ingle ce diagramme ». « Le meilleur » bien sûr, reste à vous de décider.

Ceci est plus ou moins la même chose que de tenter de résoudre un problème en utilisant un langage de programmation donné, à défaut, puis demander une meilleure langage de programmation.

Au coeur des algorithmes de dessin graphique sont des routines d'optimisation qui génèrent alors des solutions d'évaluation (ici « solution » désigne les coordonnées de chaque noeud qui ensemble, constituent une mise en page). Ces solutions sont évaluées en fonction de minimisation d'un critère unique ou une série de critères classement - à savoir la minimisation de l'un ou plusieurs attributs du graphe - par exemple, le nombre total d'arêtes qui se croisent, ou la somme des distances entre les noeuds (ou la combinaison des deux, ou une combinaison pondérée de ces deux), ou de la proximité à une configuration symétrique. Graphviz est composé de six algorithmes de mise en page différents (point Neato, fdp, SFDP, twopi et circo). Parmi ceux-ci, il semble que vous ne point utilisé; Cependant, twopi et Circo aurait pu être meilleures options compte tenu de leurs contraintes de symétrie strictes qui semblent correspondre à votre propre idée d'un graphique dessiné correctement.

En second lieu, le texte de votre question est fondée sur des « graphiques » et graphique-dessin, Après avoir lu votre description complète, je ne pense pas que votre question n'a rien à voir ni avec le concept.

Au-delà des algorithmes de dessin général graphique (comme graphviz), il y a un certain nombre d'algorithmes de mise en page spécifiques à un domaine, par exemple, des diagrammes Hasse (pour représenter des ensembles partiellement ordonnés dans la théorie de l'ordre), des graphiques Barabasi-Albert (réseaux sans échelle ), et Erdos-Renyi (Les graphes aléatoires). Chacun de ces algorithmes produit une mise en page graphique en fonction des critères et des contraintes fournies par le domaine - cela devrait vous indiquer qu'il n'y a pas une seule mise en page « meilleur » dans tous les domaines. Bien que vous avez utilisé le terme « graphique » dans votre question, votre description indique que votre problème concerne le dessin des machines d'état - un type de graphique très idiosyncrasique. algorithmes de dessin graphique général sont souvent pauvres à dessiner des graphiques spécialisés de ce genre parce que l'algorithme ne sait rien de domaine. En fait, je ne suis pas au courant de tout algorithme de mise en page pour les diagrammes d'état - tout comme il n'y a pas un pour les diagrammes de flux (pas le même, mais similaire). Sage flux de travail, vous pouvez dessiner le graphique graphviz importer ensuite à Omnigraffle pour un réglage fin - en Omnigraffle, vous aurez le contrôle fin sur les placements de noeuds et de bord

.

Autres conseils

Il y a un certain nombre d'options que je connaisse:

  • Prefuse - Ils ont une version Java plus. La nouvelle version est en Flash et a quelques dispositions agréables. Son appelé Prefuse Flare . démo illustre certaines de ses capacités de mise en page.
  • JUNG comprend un certain nombre d'options de mise en page, ainsi que ses puissantes fonctions d'analyse graphique. Il y a quelques exemples .
  • NetworkX comprend également de nombreuses possibilités de mise en page. Certains d'entre eux sont répertoriés .

Certains logiciels permettent aux utilisateurs de peaufiner les algorithmes de mise en page en temps réel, tant que nœuds se déplaçant avec la souris. Cette approche peut grandement vous aider pour les graphiques plus grands.

Je sais que la plupart Gephi (disclamer: Je suis un dev)

.

TikZ génère belles mises en page de graphique . Vous pouvez utiliser une mise en page manuelle qui vous permet de spécifier le minimum de conseils, ou vous pouvez demander la mise en page automatique. La valeur par défaut sont bonnes, et les crochets existent pour ajuster à la perfection.

Avec la mise en page semi-manuelle, vous ne devez pas déclarer tous les détails, parce que vous pouvez

  • déclarer les noeuds comme étant « au-dessus de », « en bas à droite de », etc. par rapport à d'autres nœuds.
  • placez vos nœuds sur une trame en les saisissant comme matrice. Très pratique si vous voulez laisser des positions vide
  • spécifier facilement dans ce que les bords de direction doivent entrer, sortir, plier, ou prendre les virages

Pour la mise en page automatique, la bibliothèque graphdrawing de TikZ a une assez algorithmes slicks .

Voici un exemple de mise en page manuelle et le code TeX utilisé pour l'obtenir:

exemple graphique

\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}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top