Mathematica GraphPlot и функция EdgeRendering - PullRequest
3 голосов
/ 26 сентября 2010

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

Я делаю GraphPlot[] с пользовательскими параметрами VertexRenderingFunction и EdgeRenderingFunction.Это выглядит примерно так:

Где стрелки?Ты их видишь?Ты взял мои стрелы?http://img816.imageshack.us/img816/9703/graphbadarrows.png

Как видите, было бы, как говорится, круто , если бы стрелки были сверху узлов.Есть ли простой способ hax это?

Ответы [ 2 ]

4 голосов
/ 26 сентября 2010

Я не знаю, есть ли способ сделать это напрямую с опциями GraphPlot или нет, но вы могли бы напрямую манипулировать объектом Graphics, созданным GraphPlot. Например, вот график, функции которого похожи на ваши.

bg = GraphPlot[Table[i -> Mod[3 i + 1, 9],
  {i, 0, 8}], DirectedEdges -> True,
  VertexRenderingFunction -> (
  {{White, Disk[#, 0.15]}, Circle[#, 0.15]} &),
  EdgeRenderingFunction -> (Arrow[#1] &)]

Вы можете проверить структуру графических примитивов и директив следующим образом:

  bg // InputForm

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

  MapAt[Reverse, bg, {1, 1}]

Конечно, ваш графический объект, скорее всего, будет иметь другую структуру.

Марк МакКлюр

3 голосов
/ 27 сентября 2010

Ответ Марка делает именно то, что вы просили - и вы могли бы написать свою собственную функцию, которая автоматизирует обратное.

Менее прямое решение может заключаться в том, чтобы просто немного отвести наконечники стрел от конца:

GraphPlot[Table[i -> Mod[3 i + 1, 9], {i, 0, 8}], 
 VertexRenderingFunction -> ({{White, Disk[#, 0.15]}, 
     Circle[#, 0.15]} &), DirectedEdges -> True, 
 EdgeRenderingFunction -> ({Arrowheads[{{.05, .8}}], Red, 
     Arrow[#]} &)]

Это также уменьшит застой в узлах.

...