Подтвердить что ты не робот

Улучшение макета графика

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

Graphviz - хороший инструмент для автоматического рисования, но он может быть и лучше. Начнем с примера хорошего графа) скорее конечный автомат). Не берите в голову качество (это может быть перерисовано с лучшим инструментом), это почти идеально, за исключением того, что я повернул бы его против часовой стрелки на 45 градусов, чтобы сделать симметрию очевидной. Затем читателю потребуется меньше времени, чтобы выяснить, как состояния q1 и q2 похожи и как они отличаются. Я утверждаю, что существует единственный лучший способ представить эту диаграмму, учитывая, что рядом с ней нет других частей графики.

http://gallery.hd.org/_exhibits/maths/math-finite-state-machine-DHD.gif
(источник: gallery.hd.org)

Теперь давайте посмотрим на не совсем идеальное изображение:

http://linux.softpedia.com/screenshots/Graphviz_1.png
(источник: softpedia.com)

Это похоже на то, что генерирует graphviz. Да, края гладкие, но GAAAAWWWD это не нужно путать! Это похоже на карту разума, а не готовую диаграмму, готовую к употреблению. Я считаю, что человеческие глаза КРИВЕ (не меньше) симметрии. Да, иерархия и т.д. Также являются важными факторами.

Я удивлен, что нет лучших алгоритмов. Некоторые люди вообще не являются визуальными учениками; они могут понять абстрактные понятия, читая символы. Не я!

Итак, в чем мой вопрос? Ну, есть ли лучшее бесплатное программное обеспечение для рисования графиков от среднего до среднего? возможно

Спасибо!

Дайте мне знать, как я могу улучшить этот пост.

PS Мне потребовалось 10 минут, чтобы вытащить достаточно похожего клона в диам. Это все еще не идеально, но это было удобно сделать, потому что все привязано к сетке (и я пропустил несколько мелких деталей, но не чувствую необходимости повторной загрузки). LR_0 требуется "Start--->", приходящий сверху, чтобы позволить пользователю быстрее понять начальное состояние.

Finate State Machine

4b9b3361

Ответ 1

После нескольких попыток рисования вашего графика и получения макета, который вы считаете "лучшим", вы задали вопрос здесь: есть "[b] etter free software [для] рисования малой и средней графы". Единственный критерий, который вы дали для оценки алгоритмов компоновки, - это то, как они вплотную подходят к "наилучшему способу представления этой диаграммы". "Лучшее", конечно, осталось для вас решить.

Это более или менее то же самое, что и попытка решить проблему с использованием заданного языка программирования, сбой, а затем запросить лучший язык программирования.

В основе алгоритмов графического рисования лежат подпрограммы оптимизации, которые генерируют тогда оценочные решения (здесь "решение" относится к координатам для каждого node, которые вместе составляют макет). Эти решения оцениваются в соответствии с минимизацией одного критерия или ряда ранжированных критериев, т.е. Минимизация одного или нескольких атрибутов графика, например, общее количество пересекающихся ребер или сумма расстояний между узлами (или комбинацией обеих или некоторой взвешенной комбинации этих двух) или близостью к симметричной конфигурации. Graphviz состоит из шести различных алгоритмов компоновки (dot neato, fdp, sfdp, twopi и circo). Из них, похоже, вы использовали только точку; однако twopi и circo могли бы быть лучшими вариантами, учитывая их строгие ограничения симметрии, которые, по-видимому, соответствуют вашей собственной идее правильно нарисованного графика.

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

Помимо общих алгоритмов рисования графов (например, graphviz), существует ряд алгоритмов компоновки, специфичных для домена, например диаграммы Хассе (для представления частично упорядоченных множеств в теории порядка), графики Барабаси-Альберта (безмасштабированные сети), и Erdos-Renyi (случайные графы). Каждый из этих алгоритмов создает график, основанный на критериях и ограничениях, предоставляемых доменом - это должно указывать вам, что во всех доменах нет ни одного "лучшего" макета. Хотя вы использовали термин "график" в своем вопросе, ваше описание указывает, что ваша проблема связана с рисованием государственных машин - очень своеобразным типом графа. Общие алгоритмы графического рисования часто неэффективны при рисовании специализированных графиков такого типа, потому что алгоритм ничего не знает о домене. На самом деле, я не знаю какого-либо алгоритма компоновки диаграмм состояний - так же, как и для блок-схем (не то же самое, но похожее). Потоком, вы можете нарисовать график в graphviz, а затем импортировать его в Omnigraffle для точной настройки - в Omnigraffle вы получите мелкозернистый контроль над местами размещения node и edge.

Ответ 2

Есть несколько вариантов, о которых я знаю:

Ответ 3

Некоторые программные средства позволяют пользователям настраивать алгоритмы компоновки в режиме реального времени, пока перемещаются узлы с помощью мыши. Этот подход может значительно помочь вам для больших графиков.

Я в основном знаю Gephi (disclamer: Я разработчик).

Ответ 4

TikZ генерирует красивые графические схемы. Вы можете использовать макет руководства, который позволяет указать минимальное количество подсказок или запросить автоматическую компоновку. Значения по умолчанию хороши, и существуют крючки для улучшения до совершенства.

В полу-ручном макете вам не нужно декларировать каждую деталь, потому что вы можете

  • объявлять узлы как "выше", "ниже справа" и т.д. относительно других узлов.
  • поместите ваши узлы на растр, введя их в виде матрицы: очень удобно, если вы хотите оставить некоторые позиции пустыми.
  • легко указать, в каком направлении должны входить края, оставить, согнуть или принять углы.

Для автоматической компоновки библиотека TikZ graphdrawing имеет несколько симпатичных графических алгоритмов.

Вот пример ручной компоновки и кода TeX, который использовался для ее получения:

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}