Получение функции 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)
Ответы
Ответ 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]
ImageSize
может принимать различные значения от точек принтера до значения Scaled
.
Inset
может также/взять размер в своем четвертом аргументе, но по умолчанию параметр ImageSize
объекта вставки Graphics
отбрасывается, что в этом случае немного чище.
Надеюсь, что это поможет!