سؤال

هذا هو التحدي المحدد للغاية Inforgraphic Altough السؤال القومي هو كيف تقوم ببناء أقسام بين الكلمات باستخدام Matplotlib أو Cario أو Bython Libary.

بالنظر إلى بنية البيانات التالية.

لي، أنت، 7 | أنا، أبل، 9 | أبل، أنت، 1 | الدراجة، لي، 5

سيتم عرض الأسماء أفقيا الأسماء بأكثر العلاقات أكبر من الآخرين، ثم سيكون هناك أقسام مرجحة بين الأسماء. سيكون القوس 10 المرجح ضعف سمكها كقوس 5 مرجح.

إلهام يأتي من: diversiy مماثلة. http://similardiversity.net/

دع التحدي يبدأ!

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

المحلول

هناك العديد من المكتبات، والتي يعتمدها واحدة على الأقل على matplotlib، والتي ستفعل ما تريد. أوصي NetworkX (www.network.lanl.gov) لبناء هيكل الرسم البياني الخاص بك، والتي يمكنك استخدامها بعد ذلك لاستدعاء طرق Matplotlib ذات الصلة إلى المؤامرة. الشبكة و matplotlib العمل جيدا جدا معا.

import networkx as NX
import matplotlib.pyplot as PLT
Gh = NX.Graph()
Gh.add_edge("You", "Bike", weight=1.0)
Gh.add_edge("Bike", "Apple", weight=0.9)
Gh.add_edge("Me", "Bike", weight=1.1)
all_nodes = Gh.nodes()
# to scale node size with degree:
scaled_node_size = lambda(node) : NX.degree(Gh, node) * 700
position = NX.spring_layout(Gh)    # just choose a layout scheme
NX.draw_networkx_nodes(Gh, position, node_size=map(scaled_node_size, all_nodes))
NX.draw_network_edges(Gh, position, Gh.edges(), width=1.0, alpha=1.0, edge_color="red")
# now for the Matplotlib part:
PLT.axis("off")
PLT.show()

كما ترون، يمكنك أن ترى الحواف عن طريق تطبيق عامل تخلاص المعلمة "الوزن" إلى أي من طرق "الحافة"، بنفس الطريقة التي فعلتها بنفس الطريقة التي قمت بها لتوسيع العقدة.

أود أن أوصي أيضا Pygraphviz (من الواضح باستخدام Graphviz كخلفية لها). انها تشبه جدا netwworkx (نفس المطور الرصاص).

نصائح أخرى

matplotlib ليست المكتبة المناسبة هنا، لأنها ليست مكتبة رسومات غنية للأغراض العامة. ما تحتاجه هنا هو إما شيء مثل القاهرة, ، أو أبسط بكثير، يمكنك القيام به مع إمكانيات الرسومات لأي مجموعة أدوات واجهة المستخدم الرسومية، مثل Pyqt. نهج آخر ممكن هو Pygame، الذي لديه قدرات رسم جيدة أيضا.

إذا كنت تريد مثالا، راجع هذا عينات القاهرة الصفحة، العينة الأولى - قوس. يمكنك فقط كتابة الكلمات النصية، ثم استخدم رمز ARC للحصول على قوس من أي عرض ولون بينهما.

لا أرى حقا أين الصعوبة أو التحدي. كل ما تحتاجه هو مكتبة رسومات يمكنها رسم رسائل نصية ونصف، والتي يمكن أن تكون ممكنة بكل شيء. ليست هناك حاجة لمنحنيات bezier. على سبيل المثال، يمكنك ببساطة إنشاء ملف SVG (ثم لا تحتاج حتى إلى أي مكتبة ويمكن أن تضم بشكل جيد هذا في صفحة ويب واستخدام بعض JavaScript لجعله تفاعليا).

التخطيط الفعلي بسيط: مركز الدائرة في الوسط بين الكلمتين، دائرة نصف قطرها نصف المسافة بينهما. يمكنك بعد ذلك ضبط السكتة الدماغية لتعكس الكميات الأخرى.

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