import networkx as nx
import matplotlib.pyplot as plt
user_input = list(map(int, input("Enter the edges you want to plot: ").split()))
print("The edges are: ", user_input)
G = nx.Graph()
for x in user_input:
if (x<len(user_input)):
G.add_edge(x, x+1)
ego = user_input[0]
pos = nx.spring_layout(G)
nx.draw(G, pos, node_color="lavender",
arrows=True, arrowstyle='-|>',
node_size=800, with_labels=True)
options = {"node_size": 1200, "node_color": "r"}
nx.draw_networkx_nodes(G, pos, nodelist=[ego], **options)
plt.show()
I want to create like the picture but I can not do it. And also, the numbers of edges is given by the user. This is what I want
and I am getting like this. This is what I am getting
I am hoping the user can give multiple edges and they will be projected like the image.
Your input essentially just seems to be getting a list of the nodes rather than which nodes should be joined by edges. Instead (based on, e.g., this post and answers). You could create a script (called, e.g., network.py
) containing:
import networkx as nx
import matplotlib.pyplot as plt
# get pairs of nodes that define the edges
user_input = input("Enter pairs of joined nodes separated by commas, e.g., 1 2, 1 3, 1 4:\n").split(",")
G = nx.Graph()
# add nodes
nodes = []
for edge in user_input:
for node in edge.split():
if int(node) not in nodes:
nodes.append(int(node))
G.add_node(int(node))
# add edges
for edge in user_input:
G.add_edge(*[int(e) for e in edge.split()])
pos = nx.spring_layout(G)
nx.draw(G, pos, node_color="lavender",
arrows=True, arrowstyle='-|>',
node_size=800, with_labels=True)
options = {"node_size": 1200, "node_color": "r"}
nx.draw_networkx_nodes(G, pos, nodelist=[nodes[0]], **options)
plt.show()
Then run this with:
python network.py
and input:
1 2, 1 3, 1 4, 2 3, 3 4, 3 6, 4 5, 6 5
to produce the graph you want.