So I have this code from the networkx example, but I’m trying to figure out how to limit node within a radius ‘r’ in order to graph a random geometric graph within the bounds of a circle. I know how I would do it logic-wise, but I’m a bit confused how everything works and have been trying to figure it out on my own with no solution so far. Thanks for the help!
import networkx as nx
import matplotlib.pyplot as plt
G = nx.random_geometric_graph(1000,0.1)
# position is stored as node attribute data for random_geometric_graph
pos = nx.get_node_attributes(G,'pos')
# find node near center (0.5,0.5)
dmin =1
ncenter =0
for n in pos:
x,y = pos[n]
d = (x-0.5)**2+(y-0.5)**2
if d<dmin:
ncenter = n
dmin = d
# color by path length from node near center
p = nx.single_source_shortest_path_length(G,ncenter)
plt.figure(figsize=(8,8))
#node_color=p.values()
nx.draw_networkx_edges(G,pos,nodelist=[ncenter],alpha=0.4)
nx.draw_networkx_nodes(G,pos,nodelist=p.keys(),
node_size=80,
node_color='#0F1C95',
cmap=plt.cm.Reds_r)
plt.xlim(-0.05,1.05)
plt.ylim(-0.05,1.05)
plt.axis('off')
plt.savefig('random_geometric_graph.png')
plt.show()
You could use a dict comprehension such as
to limit the dict to those nodes whose distance from
ncenteris < 5.For Python2.6 or older, you could use
You could also replace
with a one-liner:
To draw only those nodes whose distance from
ncenteris < 5, define the subgraph: