ubuntu Python和Networkx:计算节点标签编号并将其与CSV值进行比较

ymdaylpp  于 7个月前  发布在  Python
关注(0)|答案(1)|浏览(81)

我有一个简单的PythonNetworkx代码,它绘制了一个带有节点标签号和边的二维图沿着(边在我的例子中是无关的,所以如果我能以某种方式删除它们就好了):

import matplotlib.pyplot as plt
import pandas as pd
import networkx as nx

csv_io = pd.read_csv('matrix101.csv', index_col=[0])
#csv_list = csv_io.values.tolist()

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

nx.draw_networkx(G, pos=pos, labels=labels, node_color='red')
plt.axis('off')
plt.show()

字符串
输出为(节点颜色为红色):
x1c 0d1x的数据
我希望从2D图中检索节点编号将它们CSV矩阵中的值进行比较,该矩阵类似但略有修改.
因此,基本上,当我将CSV文件“matrix101.csv”输入到代码中时,必须比较CSV节点值,并且带有“X”的值应该在原始2D图形中指示不同的颜色.


的数据
我使用Pandas来读取CSV文件,但仅此而已,我遇到了障碍,无法进一步进行。
有什么想法可以实现这个比较两个矩阵的想法吗?
提前感谢!
P.S.从这个问题中借用的代码片段:
Remove rotation effect when drawing a square grid of MxM nodes in networkx using grid_2d_graph

pxy2qtax

pxy2qtax1#

您可以尝试创建颜色列表,然后将其传递给node_color=参数:

import matplotlib.pyplot as plt
import networkx as nx
import pandas as pd

df = pd.read_csv("matrix101.csv", index_col=None, header=None, sep=r"\s+", dtype=str)

N = 5
G = nx.grid_2d_graph(N, N)
pos = dict((n, n) for n in G.nodes())

colors = [
    "red" if df.loc[N - 1 - j, i] == str(i + 1 + (N - 1 - j) * N) else "green"
    for i, j in G.nodes()
]
# OR:
# colors = ["red" if df.loc[N - 1 - j, i] != "X" else "green" for i, j in G.nodes()]

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

nx.draw_networkx(G, pos=pos, labels=labels, node_color=colors)
plt.axis("off")
plt.show()

字符串
显示:


的数据

相关问题