Python 使用networkx绘制图形时显示背景网格(也称为单元格)

Python 使用networkx绘制图形时显示背景网格(也称为单元格),python,graph,grid,networkx,Python,Graph,Grid,Networkx,我正在使用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.gr

我正在使用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)
它自身工作(请参阅),但在调用

nx.draw(G, pos)
它显示了不带网格的图形(请参见)。我猜网格仍在背景中,但networkx完全覆盖了它

那么,有没有什么方法可以用plt或networkx命令来显示网格,我没有发现它允许类似的东西

编辑:这里是使用的完整代码。查看(取消)注释时的差异
nx.draw(G,pos)

将numpy导入为np
将matplotlib.pyplot作为plt导入
将networkx导入为nx
def quit_图(事件):
如果event.key='q':
plt.close(event.canvas.figure)
节点=[[1,1],[3,1],[6,1],[3,2],[13,1],[3,5]]
距离_数组=[
[[],[],[1,3],[],[5],[],[],[],[],[],[],[],[],[],[]],
[[],[3],[0],[2],[],[],[],[],[],[],[],[],[],[],[]],
[[],[],[],[1,3],[5],[],[],[4],[],[],[],[],[],[]],
[[],[1],[0],[2,5],[],[],[],[],[],[],[10],[],[],[],[]],
[[],[],[],[],[],[],[],[2],[],[],[3,5],[],[],[],[]],
[[],[],[],[3],[0,2],[],[],[],[],[],[4],[],[],[],[],[]],
[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],
[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],
[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]]
当前\变速箱\范围=0
传输范围=np.0((len(节点)),数据类型=int)
pos={x:[节点[x][0],节点[x][1]]用于x范围内的x(len(节点))}
图_节点=[x代表x范围内的x(len(节点))]
当前\变速箱\范围=0
cid=plt.gcf().canvas.mpl\u connect('key\u press\u event',quit\u图)
plt.xlim(0,14)
plt.ylim(0,10)
plt.xticks([x+0.5表示x范围内的x(0,14)],[''+str(x)表示x范围内的x(0,13)])
plt.yticks([x+0.5表示x范围(0,10)],['\n\n'+str(x)+'\n\n\n'表示x范围(0,9)])
plt.grid(真)
G=nx.Graph()
对于图_节点中的节点:
G.add_节点(node)
对于图_节点中的节点:
对于X范围内的j(变速器范围[节点]+1):
对于距离_数组[node][j]中的k:
如果(j使用plt.grid('on'))

如果要使用
nx.draw(G)
而不是
nx.draw\u networkx(G)
则还必须使用
plt.axis('on')
打开轴

您可以避免使用
draw
,而是调用绘图子函数:

#...
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
plt.show()
或者按照Aric的建议,使用
draw\u networkx

如果您希望对图形进行长期控制(因为
draw
实现可能会更改),则建议使用这种方法

当然,如果您不担心的话,只需在调用
draw


你试过了吗?试过了,没有改变任何东西。但我只是看到了一个
ax
参数,这可能会有帮助。只需要弄清楚它是如何工作的,非常感谢!它不适用于
nx.draw(G)
但是,我不得不改成
nx.draw\u networkx(G)
(如你所建议的)。也许你可以将第一句话改为“使用
plt.grid('on')
nx.draw\u networkx(G)
”,这样更清楚。
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_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
plt.show()