Pergunta

Tenho paralisia de perfeição quando se trata de produzir algo gráfico. Se as simetrias do visual não foram totalmente exploradas, tenho mais dificuldade em compreender o que está acontecendo. Também sou um aluno muito visual e adoro simplificar as coisas que acabei de aprender e desenhá -las no papel.

GraphViz é uma boa ferramenta para desenhar coisas automaticamente, mas pode ser melhor. Vamos começar com um exemplo de um bom gráfico) uma máquina de estado). Não importa a qualidade (pode ser redesenhado com uma ferramenta melhor), esta é quase perfeita, exceto que eu o transformaria no sentido anti-horário de 45 graus para tornar a simetria aparente. Em seguida, deve levar o leitor menos tempo para descobrir como os estados Q1 e Q2 são semelhantes e como eles diferem. Argumento que existe uma única maneira de representar esse diagrama, já que não há outras peças de gráfico ao lado dele.

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

Agora, vejamos uma representação menos do que perfeita:

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

Parece algo que um GraphViz geraria. Sim, as bordas são suaves, mas gaaaawwwd, isso é desnecessário confuso! Parece um mapa mental, não um diagrama acabado pronto para o consumo. Eu acredito que os olhos humanos desejam (não menos) simetria. Sim, hierarquia, etc. também são fatores importantes.

Estou surpreso que não haja algoritmos melhores disponíveis. Algumas pessoas não são aprendizes visuais; Eles podem entender conceitos abstratos lendo símbolos. Eu não!

Então, qual é a minha pergunta? Bem, há melhor software livre disponível para desenhar gráficos pequenos a médicos? Talvez

Obrigada!

Deixe -me saber como posso melhorar este post.

PS, levei 10 minutos para desenhar um clone semelhante o suficiente no DIA. Ainda não é perfeito, mas era conveniente fazer, porque tudo se encaixa na grade (e eu perdi alguns pequenos detalhes, mas não sinto vontade de reaplorar). O LR_0 precisa de um "Start --->" vindo de cima para deixar o usuário entender o estado inicial mais cedo.

Finate State Machine

Foi útil?

Solução

Depois de várias tentativas de desenhar seu gráfico e não conseguir um layout que você considera "melhor", você fez a pergunta aqui: Existe [b] software livre [para] desenhar gráficos pequenos a médicos". O critério exclusivo que você deu para avaliar os algoritmos de layout é o quão próximo eles chegam à "melhor maneira de representar esse diagrama". "Melhor", é claro, deixou para você decidir.

Isso é mais ou menos o mesmo que tentar resolver um problema usando uma determinada linguagem de programação, falhando e solicitando uma melhor linguagem de programação.

No coração dos algoritmos de desenho de gráficos estão as rotinas de otimização que geram soluções de avaliação ('Solução' aqui refere -se às coordenadas para cada nó que juntos compreendem um layout). Essas soluções são avaliadas de acordo com a minimização de um único critério ou uma série de critérios classificados-a minimização de um ou mais atributos do gráfico-por instância, o número total de arestas que cruzam ou a soma das distâncias entre nós (ou a combinação de ambos, ou alguma combinação ponderada desses dois), ou a proximidade de uma configuração simétrica. O GraphViz é composto por seis algoritmos de layout diferentes (ponto pato, FDP, SFDP, TWOPI e CIRO). Destes, parece que você só usou ponto; No entanto, Twopi e Circo podem ter sido melhores opções, dadas suas rigorosas restrições de simetria que parecem corresponder à sua própria idéia de um gráfico corretamente desenhado.

Segundo, o texto da sua pergunta é direcionado para "gráficos" e desenho de gráficos, depois de ler sua descrição completa, não acho que sua pergunta tenha nada a ver com nenhum dos conceitos.

Além dos algoritmos gerais de desenho de gráficos (como o GraphViz), existem vários algoritmos de layout específicos de domínio, por exemplo, diagramas HASSE (para representar conjuntos parcialmente ordenados em teoria da ordem), gráficos Barabasi-Albert (redes sem escala) e e e redes sem escala e e sem escala) e e redes e redes sem escala e e sem escala), e e as redes e redes sem escala) e as redes sem escala e e as redes sem escala e e as redes sem escala e e as redes e sem escala) e Erdos-Renyi (gráficos aleatórios). Cada um desses algoritmos produz um layout de gráfico com base em critérios e restrições fornecidas pelo domínio-isso deve indicar a você que não há um único layout "melhor" em todos os domínios. Embora você tenha usado o termo "gráfico" em sua pergunta, sua descrição indica que seu problema está relacionado ao desenho de máquinas de estado-um tipo de gráfico altamente idiossincrático. Os algoritmos de desenho de gráficos gerais geralmente são ruins em desenhar gráficos especializados desse tipo, porque o algoritmo não sabe nada sobre o domínio. Na verdade, não estou ciente de nenhum algoritmo de layout para diagramas de estado-assim como não há um para diagramas de fluxo (não iguais, mas similares). Em termos de fluxo de trabalho, você pode desenhar o gráfico no GraphViz e importá-lo para o omnigrafle para o ajuste fino-no omnigraffle, você terá controle de granulação fina sobre os posicionamentos do nó e borda.

Outras dicas

Existem várias opções que conheço:

  • Prefuso - eles têm um Versão Java mais antiga. A versão mais recente está no Flash e tem alguns layouts agradáveis. É chamado Flare prefuso. o página de demonstração ilustra alguns de seus recursos de layout.
  • Jung inclui várias opções de layout, bem como suas poderosas funções de análise de gráficos. Existem alguns exemplos aqui.
  • O NetworkX também inclui vários recursos de layout. Alguns deles estão listados aqui.

Alguns softwares permitem que os usuários aprimorem os algoritmos de layout em tempo real, desde que os nós em movimento com o mouse. Essa abordagem pode ajudá -lo muito para gráficos maiores.

Eu sei principalmente Gephi (Disclâmer: Eu sou um dev).

Tikz gera belos layouts de gráficos. Você pode usar um layout manual que permite especificar o mínimo de dicas ou solicitar um layout automático. Os padrões são bons e existem ganchos para ajustar a perfeição.

Com o layout semi-manual, você não precisa declarar todos os detalhes, porque você pode

  • Declare os nós como sendo 'acima de', 'abaixo do direito de', etc. em relação a outros nós.
  • Coloque seus nós em uma varredura, inserindo -os como uma matriz: muito conveniente se você quiser deixar algumas posições vazias.
  • Especifique facilmente em que direção as bordas devem entrar, sair, dobrar ou tomar cantos

Para layout automático, Tikz's graphdrawing A biblioteca tem alguns Algoritmos muito lisos.

Aqui está um exemplo de layout manual e o código TEX usado para obtê -lo:

example graph

\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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top