নেটওয়ার্কএক্স থেকে শ্রেণিবদ্ধ আউটপুট গ্যারান্টি দেওয়ার কোন উপায় আছে কি?


86

আমি গাছের কাঠামোর একটি ফ্লো ডায়াগ্রাম উত্পাদন করার চেষ্টা করছি । আমি নেটওয়ার্কেক্স দিয়ে প্রতিনিধি গ্রাফ তৈরি করতে সক্ষম হয়েছি, তবে গাছটি দেখানোর জন্য আমার একটি উপায় দরকার প্লট আউটপুট করার সময় কাঠামো । আমি গ্রাফ প্লট করতে matplotlib.pylab ব্যবহার করছি।

আমার এখানে কাঠামোর মতো একটি কাঠামোর ডেটা প্রদর্শন করা দরকার show । যদিও আমার কাছে সাব-গ্রাফ নেই।

আমি কীভাবে এমন কাঠামোর গ্যারান্টি দিতে পারি?

অবিশ্বাসীদের জন্য উদাহরণ:

বিভিন্ন নেটওয়ার্কএক্স লেআউট

আমি পাইলাব এবং গ্রাফভিজ সহ গ্রাফগুলি প্রদর্শন করতে সক্ষম হয়েছি, তবে আমি যে গাছের কাঠামোটি খুঁজছি সেগুলিও সরবরাহ করি না। প্রতিটি লেআউট নেটওয়ার্কেক্সের কাছে চেষ্টা করার চেষ্টা করেছি, তবে তাদের কোনওটিই শ্রেণিবিন্যাস দেখায় না । আমি কী নিশ্চিত করতে পারি না কী বিকল্পগুলি / মোড এটি দেবে বা যদি আমার ওজন ব্যবহারের প্রয়োজন হয়। কোন পরামর্শ একটি গুচ্ছ সাহায্য করবে।

@ জেটেরেস:

উপরের প্লটগুলি আমি কীভাবে উত্পাদন করতাম তার একটি রুক্ষ রূপরেখা এখানে দেওয়া হল। আমি কিছু লেবেল যুক্ত করেছি, তবে এটির তুলনায় অন্যান্য।

import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()

G.add_node("ROOT")

for i in xrange(5):
    G.add_node("Child_%i" % i)
    G.add_node("Grandchild_%i" % i)
    G.add_node("Greatgrandchild_%i" % i)

    G.add_edge("ROOT", "Child_%i" % i)
    G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
    G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)

plt.title("draw_networkx")
nx.draw_networkx(G)

plt.show()

উত্তর:


118

আপনি যদি নির্দেশিত গ্রাফ ব্যবহার করেন তবে গ্রাফভিজ ডট বিন্যাস গাছের সাথে আপনার পছন্দ মতো কিছু করবে। এখানে উপরের সমাধানগুলির মতো কিছু কোড রয়েছে যা দেখায় যে এটি কীভাবে করা যায়

import networkx as nx
from networkx.drawing.nx_agraph import graphviz_layout
import matplotlib.pyplot as plt
G = nx.DiGraph()

G.add_node("ROOT")

for i in range(5):
    G.add_node("Child_%i" % i)
    G.add_node("Grandchild_%i" % i)
    G.add_node("Greatgrandchild_%i" % i)

    G.add_edge("ROOT", "Child_%i" % i)
    G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
    G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)

# write dot file to use with graphviz
# run "dot -Tpng test.dot >test.png"
nx.nx_agraph.write_dot(G,'test.dot')

# same layout using matplotlib with no labels
plt.title('draw_networkx')
pos=graphviz_layout(G, prog='dot')
nx.draw(G, pos, with_labels=False, arrows=False)
plt.savefig('nx_test.png')

গ্রাফভিজ আউটপুট

নেটওয়ার্কএক্সএক্স / ম্যাটপ্ল্লিটিব আউটপুট

আপডেট করা হয়েছে

নেটওয়ার্কেক্সেক্স -২.০ (এবং আসন্ন নেটওয়ার্কেক্স -২.১ এর তীরগুলিও আঁকতে) এর জন্য আপডেট করা একটি সংস্করণ এখানে রয়েছে।

import networkx as nx
from networkx.drawing.nx_agraph import write_dot, graphviz_layout
import matplotlib.pyplot as plt
G = nx.DiGraph()

G.add_node("ROOT")

for i in range(5):
    G.add_node("Child_%i" % i)
    G.add_node("Grandchild_%i" % i)
    G.add_node("Greatgrandchild_%i" % i)

    G.add_edge("ROOT", "Child_%i" % i)
    G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
    G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)

# write dot file to use with graphviz
# run "dot -Tpng test.dot >test.png"
write_dot(G,'test.dot')

# same layout using matplotlib with no labels
plt.title('draw_networkx')
pos =graphviz_layout(G, prog='dot')
nx.draw(G, pos, with_labels=False, arrows=True)
plt.savefig('nx_test.png')

এখানে চিত্র বর্ণনা লিখুন


4
আহ হা! সুতরাং আমার যা দরকার তা হ'ল 'ডট' বিন্যাসের সাথে নির্দেশিত গ্রাফ। আমি জানতাম এটি খুব ছোট কিছু ছিল। অনেক ধন্যবাদ আরিক!
সর্বোচ্চ

নোডগুলি আরোহণের লেবেল করার কোনও ভাল উপায় আছে কি? তার অর্থ এই যে, আমি g = nx.full_rary_tree(2, 10)যে প্রান্তগুলি পেয়েছি সেগুলি প্রিন্ট করা হলে আমি একটি গ্রাফ তৈরি করি: [(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), ... ]তবে এটি তাদেরকে অন্য ক্রমে ভিজ্যুয়ালাইজ করবে ...
CodeKingPlusPlus

4
পাইগ্র্যাপভিজ পাইথন 3 এর সাথে কাজ করে এবং এই কোডটি পাইথন 3 এর সাথে কাজ করবে
অ্যারিক

4
এছাড়াও যদি আপনার pygraphvizনিয়মিত উপায়ে ইনস্টল করতে কোনও সমস্যা দেখা দেয় তবে চেষ্টা করুনpip install --install-option="--include-path=/usr/local/include/" --install-option="--library-path=/usr/local/lib/" pygraphviz
রোটাইল

4
@ রোটাইল এটি ইনস্টল করার পরে আমার জন্য কাজ করেছে graphviz(আমার ক্ষেত্রে ব্যবহার করার ক্ষেত্রে brew install graphviz)।
শিভেন্দ্র

10

আপনি কাছে পেতে পাইগ্রাভিজ ব্যবহার করতে পারেন:

>>> import pygraphviz
>>> import networkx
>>> import networkx as nx
>>> G = nx.Graph()
>>> G.add_node("ROOT")
>>> for i in xrange(5):
...     G.add_node("Child_%i" % i)
...     G.add_node("Grandchild_%i" % i)
...     G.add_node("Greatgrandchild_%i" % i)
...     G.add_edge("ROOT", "Child_%i" % i)
...     G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
...     G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)

>>> A = nx.to_agraph(G)
>>> A.layout('dot', args='-Nfontsize=10 -Nwidth=".2" -Nheight=".2" -Nmargin=0 -Gfontsize=8')
>>> A.draw('test.png')

ফলাফল: এখানে চিত্র বর্ণনা লিখুন

দ্রষ্টব্য আপনার উপরে পোস্ট করা লিঙ্কটি থেকে আমি গ্রাফভিজ বিকল্পগুলি অনুলিপি করেছি। আমি নিশ্চিত নই কেন চতুর্থ শিশুটি কঠোরভাবে উল্লম্ব বিন্যাসের পরিবর্তে শীর্ষে আঁকা। গ্রাফভিজ অপশন সম্পর্কে আরও বেশি জানেন এমন কেউ সেই সাথে সহায়তা করতে পারেন।


ধন্যবাদ এটি চেষ্টা করার সময় আমি যা দেখছিলাম ঠিক এটি ছিল। আমি এটি কিছুটা অদ্ভুত বলে মনে করি কেন এটি এরকম কিছু তৈরি করেছিল।
সর্বোচ্চ

4
নোট করুন যে নেটওয়ার্কএক্সের 1.11 সংস্করণে এপিআই পরিবর্তন হয়েছে। to_agraphফাংশন এখন অবস্থিত nx.nx_agraph.to_agraph
এম00am

4
শিশুরা সবসময় তাদের পিতামাতার নীচে থাকে তা নিশ্চিত করার কোনও উপায় আছে কি?
Dror

0

আপনি পিতামহ ব্যবহার করতে পারেন ইনস্টল করতে না চাইলে আপনি পাইথন-একমাত্র সমাধানের জন্য ।

এছাড়াও, এই ধরণের ভিজ্যুয়ালাইজেশনকে একটি স্তরযুক্ত গ্রাফ অঙ্কন বা সুজিমা-স্টাইলের গ্রাফ অঙ্কন বলা হয় , যা বিভিন্ন ধরণের গ্রাফ প্রদর্শন করতে পারে।

বিশদ ও বাস্তবায়নের জন্য আমার একটি পৃথক প্রশ্নের উত্তর দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.