我使用networkx绘制一个网络图,其中节点位于字段上的给定位置。该字段被分成一定量的小区,节点位置对应一个小区。在绘制图形时,我想在背景中显示网格,以便图形中的单元格和距离可见。 networkx是否提供了一个选项?我找不到一个。我尝试通过pyplot设置网格:
plt.xlim(0,14)
plt.ylim(0,10)
plt.xticks([x for x in xrange(0,14)])
plt.yticks([x for x in xrange(0,10)])
plt.grid(True)
单独工作(参见here)但同时调用
nx.draw(G, pos)
它显示没有网格的图形(参见here)。我猜测网格仍在后台,但网络完全覆盖它。
那么有没有办法用plt或者networkx命令来显示网格,我找不到允许类似的东西?
编辑:这是使用的完整代码。查看(联合国)nx.draw(G,pos)
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
def quit_figure(event):
if event.key == 'q':
plt.close(event.canvas.figure)
nodes = [[1,1],[3,1],[6,1],[3,2],[13,1],[3,5]]
distance_array = [
[[],[],[1,3],[],[5],[],[],[],[],[],[],[],[],[],[]],
[[],[3],[0],[2],[],[],[],[],[],[],[],[],[],[],[]],
[[],[],[],[1,3],[5],[],[],[4],[],[],[],[],[],[]],
[[],[1],[0],[2,5],[],[],[],[],[],[],[10],[],[],[],[]],
[[],[],[],[],[],[],[],[2],[],[],[3,5],[],[],[],[]],
[[],[],[],[3],[0,2],[],[],[],[],[],[4],[],[],[],[],[]],
[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],
[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],
[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]]
current_transmission_range = 0
transmission_range = np.zeros((len(nodes)), dtype=int)
pos = {x:[nodes[x][0],nodes[x][1]] for x in xrange(len(nodes))}
graph_nodes = [x for x in xrange(len(nodes))]
current_transmission_range = 0
cid = plt.gcf().canvas.mpl_connect('key_press_event', quit_figure)
plt.xlim(0,14)
plt.ylim(0,10)
plt.xticks([x+0.5 for x in xrange(0,14)], [' '+str(x) for x in xrange(0,13)])
plt.yticks([x+0.5 for x in xrange(0,10)], ['\n\n'+str(x)+'\n\n\n\n' for x in xrange(0,9)])
plt.grid(True)
G = nx.Graph()
for node in graph_nodes:
G.add_node(node)
for node in graph_nodes:
for j in xrange(transmission_range[node]+1):
for k in distance_array[node][j]:
if(j <= current_transmission_range):
G.add_edge(node, k,weight=j)
edge_weight=dict([((u,v,),int(d['weight'])) for u,v,d in G.edges(data=True)])
nx.draw_networkx_edge_labels(G, pos,edge_labels=edge_weight)
# draw graph
# nx.draw(G, pos)
plt.show()
答案 0 :(得分:1)
使用plt.grid(&#39; on&#39;)
import networkx as nx
import matplotlib.pyplot as plt
G = nx.path_graph(4)
nx.draw_networkx(G)
plt.grid('on')
plt.show()
如果您想使用nx.draw(G)
代替nx.draw_networkx(G)
,还必须使用plt.axis('on')
打开轴。
答案 1 :(得分:0)
NetworkX's draw
explicitly turns off axis
您可以避免使用draw
并调用绘图子功能:
#...
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
plt.show()
或者使用draw_networkx
,正如Aric建议的那样。
如果您正在寻找对绘图的长期控制(因为draw
实施可能会改变),建议采用这种方法。
当然,如果您不担心,只需在致电plt.axes().set_axis_on()
后立即draw