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

Получение функции VertexRenderingFunction (не)

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


(источник: yaroslavvb.com)

edges = Most[
    ArrayRules[GraphData[{"Path", 5}, "AdjacencyMatrix"]]][[All, 1]];
doit[vrf_] := 
  Print /@ Table[
    GraphPlot[Rule @@@ edges[[k ;;]], VertexRenderingFunction -> vrf, 
     VertexLabeling -> True], {k, 1, Length[edges]}];
doit[({White, EdgeForm[Black], Disk[#, .1], Black, Text[#2, #1]} &)];
doit[Automatic];

Обновление через 1 час:

Майкл Пилат как обычно дает решение, вот как это выглядит с

(Inset[Graphics[{White, EdgeForm[Black], Disk[{0, 0}, .05], Black, 
     Text[#2, {0, 0}]}, ImageSize -> 25], #] &) 
для функции рендеринга


(источник: yaroslavvb.com)

4b9b3361

Ответ 1

Inset a Graphics выражение с ImageSize, чтобы поместить ваши вершины:

GraphPlot[Rule @@@ edges,
 VertexRenderingFunction -> (Inset[
     Graphics[{White, EdgeForm[Black], Disk[{0, 0}, .05], Black, 
       Text[#2, {0, 0}]}, ImageSize -> 25], #] &),
 VertexLabeling -> True]

Mathematica graphics

ImageSize может принимать различные значения от точек принтера до значения Scaled.

Inset может также/взять размер в своем четвертом аргументе, но по умолчанию параметр ImageSize объекта вставки Graphics отбрасывается, что в этом случае немного чище.

Надеюсь, что это поможет!