إنشاء رسم بياني مع حواف بألوان مختلفة في الرياضيات
-
29-09-2019 - |
سؤال
أرغب في إنشاء رسم بياني (نظرية الرسم البياني) حيث يكون لبعض الحواف لونًا مختلفًا لحواف أخرى ، والتي سيتم استخدامها لتسليط الضوء على مسار في الرسم البياني من قمة إلى أخرى.
فيما يلي بعض الأمثلة التي لها حواف ملونة مختلفة http://demonstrations.wolfram.com/aGraptheornInterpretationofTheSumofTheFirstNintegers/ و http://demonstrations.wolfram.com/ramsey336/. نظرت إلى التعليمات البرمجية المصدر لهذه ولكن هذه الحلول تبدو معقدة. أحتاج إلى مثال بسيط للعمل منه. أعتقد أنني بحاجة إلى استخدام edgerengingfunction كأحد الخيارات ل GraphPlot
.
بالإضافة إلى ذلك edgerengingfunction توثيق في جزء "مزيد من المعلومات" يقول:
هذا يبدو مفيدًا ولكن للأسف لا توجد أمثلة مشفرة لتجربتها.
أخذ ذلك حرفيًا جربت أشياء مثل
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]
إليك طريق من خلال الرسم البياني الذي نود تسليط الضوء عليه.
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]
نصائح أخرى
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]}
&)
]
وظيفة التقديم هي وظيفة رد الاتصال ، والتي تأخذ 3 وسيطات. الأول هو قائمة إحداثيات الخط ، والثاني هو رؤوس الحافة ، والثالث هو تسمية الحافة.
في Mathematica ، يمكنك إنشاء وظيفة مجهولة (f[#1,#2,#3,...] &)
.