使用grid_2d_graph在网络x中绘制MxM节点的方形网格时移除旋转效果 [英] Remove rotation effect when drawing a square grid of MxM nodes in networkx using grid_2d_graph

查看:721
本文介绍了使用grid_2d_graph在网络x中绘制MxM节点的方形网格时移除旋转效果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要生成一个正则图(也称为格子网络),它具有 100x100 节点。我开始用以下代码绘制 10x10 图:

 从numpy导入导入numpy 
*
从networkx导入导入networkx为nx
*
导入matplotlib.pyplot作为plt

G = nx.grid_2d_graph( 10,10)
nx.draw(G)

plt.axis('off')
plt.show()



但我得到的是这样的:



另外,我需要为每个节点提供其ID,范围从0到9999 (对于100x100网络)。任何想法将不胜感激!

解决方案

默认情况下,



编辑



使用@AbdallahSobehy的建议,我们可以从左到右和从上到下标注节点。



<$对于在G.nodes()中的i,j)
,(p(p(i,j),i +(N-1-j)* 10) code>


I need to generate a regular graph (also known as lattice network) which has 100x100 nodes. I started off with drawing a 10x10 graph with the following code:

import numpy
from numpy import *
import networkx as nx
from networkx import *
import matplotlib.pyplot as plt

G=nx.grid_2d_graph(10,10)        
nx.draw(G)

plt.axis('off')
plt.show()

but what I get is this:

Is there any way of getting rid of this sort of rotation effect the output has? My final network must look like a chess table, just like this (please ignore the lables):

Also, I need to give each node its ID, ranging from 0 to 9999 (in the case of the 100x100 network). Any idea will be much appreciated!

解决方案

By default, networkx.draw uses a spring layout. Instead, you can provide your own positions with parameter pos. This is actually really simple, since the labels of nodes given networkx.grid_2d_graph actually are a (row, column) tuple:

>>> G=nx.grid_2d_graph(2,2)
[(0, 1), (1, 0), (0, 0), (1, 1)]

Thus you can use a node's name as its position. So you just need to create a dictionary mapping nodes to themselves, and pass that as the position.

pos = dict( (n, n) for n in G.nodes() )

However, since you also want to add node labels, you should use networkx.draw_networkx, which takes a dictionary of custom labels as an optional parameter. You'll need a dictionary mapping nodes to their new labels. Since NetworkX gives each node the label (row, column) by default, we can just label each node with row * 10 + column:

labels = dict( ((i, j), i * 10 + j) for i, j in G.nodes() )

Putting it all together, you get the following code which yields the graph below:

import networkx as nx
import matplotlib.pyplot as plt

N = 10
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() )
labels = dict( ((i, j), i * 10 + j) for i, j in G.nodes() )
nx.draw_networkx(G, pos=pos, labels=labels)

plt.axis('off')
plt.show()

EDIT

Using the suggestion from @AbdallahSobehy, we can label the nodes from left to right and top to bottom.

labels = dict( ((i, j), i + (N-1-j) * 10 ) for i, j in G.nodes() )

这篇关于使用grid_2d_graph在网络x中绘制MxM节点的方形网格时移除旋转效果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆