سؤال

أرغب في إنشاء رسم بياني (نظرية الرسم البياني) حيث يكون لبعض الحواف لونًا مختلفًا لحواف أخرى ، والتي سيتم استخدامها لتسليط الضوء على مسار في الرسم البياني من قمة إلى أخرى.

فيما يلي بعض الأمثلة التي لها حواف ملونة مختلفة http://demonstrations.wolfram.com/aGraptheornInterpretationofTheSumofTheFirstNintegers/ و http://demonstrations.wolfram.com/ramsey336/. نظرت إلى التعليمات البرمجية المصدر لهذه ولكن هذه الحلول تبدو معقدة. أحتاج إلى مثال بسيط للعمل منه. أعتقد أنني بحاجة إلى استخدام edgerengingfunction كأحد الخيارات ل GraphPlot.

بالإضافة إلى ذلك edgerengingfunction توثيق في جزء "مزيد من المعلومات" يقول:

Mathematica graphics

هذا يبدو مفيدًا ولكن للأسف لا توجد أمثلة مشفرة لتجربتها.

أخذ ذلك حرفيًا جربت أشياء مثل

GraphPlot [{1 -> 2 ، 2 -> 3 ، 3 -> 4 ، 4 -> 1 ، 2 -> 4 ، 4 -> 5 ، 4 -> 6} ، Vertexlabeling -> True ،
EdgerenderingFunction -> g [{1 ، 2} ، {1 ، 2} ، red]

لكن هذا لن ينجح. سوف يستغرق الأمر شيئًا أكثر ذكاءً من ذلك.

هل كانت مفيدة؟

المحلول

إليك مثال يوضح كيفية أتمتة تسليط الضوء على مسار معين من خلال رسم بياني.

إليك رسم بياني سخيف ، محدده قائمة قواعد الحافة:

edges = Table[i -> Mod[1 + i^2, 10], {i, 0, 9}];
GraphPlot[edges, VertexLabeling -> True]

Mathematica graphics

إليك طريق من خلال الرسم البياني الذي نود تسليط الضوء عليه.

path = {0, 1, 2, 5, 6, 7, 0};

دعنا نقسم المسار إلى الحواف ، وهو ما يمثل حقيقة أننا نريد تسليط الضوء على الحافة بشكل مستقل عن اتجاهها.

edgesToHighlight = Partition[path, 2, 1];
edgesToHighlight = Join[edgesToHighlight,
    Reverse /@ edgesToHighlight];

نكتب EdgeRenderingFunction هذا يجعل ميزة في أحد أنمتين ، اعتمادًا على ما إذا كان في قائمتنا أم لا.

erf[pts_, edge_, ___] := If[MemberQ[edgesToHighlight, edge],
    {Thick, Black, Arrow[pts, 0.1]}, {Darker[Red], Line[pts]}];

أخيرًا ، نعرض النتيجة.

GraphPlot[edges, EdgeRenderingFunction -> erf,
    VertexLabeling -> True]

Mathematica graphics

نصائح أخرى

GraphPlot[
 {1 -> 2, 2 -> 3, 3 -> 4, 4 -> 1, 2 -> 4, 4 -> 5, 4 -> 6}, 
 VertexLabeling -> True, 
 EdgeRenderingFunction -> (
    {If[#2 == {1, 2}, Red, Black], 
     Line[#1]}
  &)
]

Mathematica graphics

وظيفة التقديم هي وظيفة رد الاتصال ، والتي تأخذ 3 وسيطات. الأول هو قائمة إحداثيات الخط ، والثاني هو رؤوس الحافة ، والثالث هو تسمية الحافة.

في Mathematica ، يمكنك إنشاء وظيفة مجهولة (f[#1,#2,#3,...] &).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top