Управление рендерингом растровых изображений

Я пытаюсь

  • создать график для отображения на веб-сайте через Graphviz.
  • сделайте каждый узел кликабельным с помощью imagemap (или некоторых других инструментов).

Для этого я должен сделать график

  • Какой атрибут я должен установить, чтобы получить максимальную ширину / высоту отображаемого графа? Я заглянул на страницу http://www.graphviz.org/doc/info/attrs.html и попытался манипулировать такими атрибутами, как size но это не похоже на меня.
  • Как я должен интерпретировать pos атрибуты узлов и ребер?

1 ответ

Решение

Управление размером

Как вы правильно предположили, это можно сделать, изменив size,

Вот некоторые примеры:

digraph {1->2;}

Размеры изображения: 83 * 155 пикселей. Это размер графика с настройками по умолчанию.

digraph {size=1; 1->2;}

Размеры изображения: 51 * 96 пикселей. Изображение было уменьшено до 1 дюйма (96 точек на дюйм). Это ожидаемое поведение, потому что в документации говорится:

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

digraph {size=2; 1->2;}

Размеры изображения: 83 * 155 пикселей. Опять же ожидаемое поведение, график уже меньше 2 дюймов и не нуждается в уменьшении.

digraph {size="2!"; 1->2;}

Размеры изображения: 103 * 192 пикселей. График масштабировался до тех пор, пока одно из измерений не равнялось 2 дюймам. Ожидаемое поведение, потому что в документации говорится:

Если размер заканчивается восклицательным знаком (!), То он принимается за желаемый размер. В этом случае, если оба размера чертежа меньше размера, чертеж масштабируется равномерно до тех пор, пока хотя бы одно измерение не станет равным его размеру в размере.

Интерпретация pos-атрибутов узлов и ребер

Я предполагаю, что вы хотите pos значения формата xdot.

Xdot графа

digraph {1->2;}

является следующим

digraph {
    node [label="\N"];
    graph [bb="0,0,54,108",
        _draw_="c 9 -#ffffffff C 9 -#ffffffff P 4 0 -1 0 108 55 108 55 -1 ",
        xdotversion="1.2"];
    1 [pos="27,90", width="0.75", height="0.5", _draw_="c 9 -#000000ff e 27 90 27 18 ", _ldraw_="F 14.000000 11 -Times-Roman c 9 -#000000ff T 27 84 0 7 1 -1 "];
    2 [pos="27,18", width="0.75", height="0.5", _draw_="c 9 -#000000ff e 27 18 27 18 ", _ldraw_="F 14.000000 11 -Times-Roman c 9 -#000000ff T 27 12 0 7 1 -2 "];
    1 -> 2 [pos="e,27,36.413 27,71.831 27,64.131 27,54.974 27,46.417", _draw_="c 9 -#000000ff B 4 27 72 27 64 27 55 27 46 ", _hdraw_="S 5 -solid c 9 -#000000ff C 9 -#000000ff P 3 31 46 27 36 24 46 "];
}

Положительные значения узлов обозначают центр положения узла. Поскольку ограничивающим прямоугольником графика является "0,0,54,108", позиции узлов "27,18" и "27,90" идеально отцентрированы по горизонтали.

Для краев, я думаю, pos содержит точки краевых сегментов, тогда как _draw_ содержит контрольные точки B-Spline (но я не совсем уверен в этом).

Другие вопросы по тегам