Получение VertexRenderingFunction в (не) масштабе - PullRequest
2 голосов
/ 08 ноября 2010

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

http://yaroslavvb.com/upload/vrf-scaling.png

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], #] &) 
для функции рендеринга

http://yaroslavvb.com/upload/vrf-scaling-fixed.png

1 Ответ

4 голосов
/ 08 ноября 2010

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 объекта inset Graphics, который в этом случае немного чище.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...