【问题标题】:getting ValueError: 'vertices' must be a 2D list or array with shape Nx2获取 ValueError:“顶点”必须是形状为 Nx2 的 2D 列表或数组
【发布时间】:2021-12-25 04:11:26
【问题描述】:

我有一个字典,其中键是节点名称,值是节点位置。字典(dicts) 看起来像这样:

{0: array([ 360, 259, 364, 259, 364, 261, 360, 261]), 
 1: array([ 380, 258, 385, 258, 385, 262, 380, 262]), 
 2: array([ 365, 258, 370, 258, 370, 262, 365, 262]), 
 3: array([ 386, 256, 393, 256,393, 260,386, 260])}

我正在尝试使用 networkx 绘制图表,但出现错误:

ValueError: 'vertices' 必须是形状为 Nx2 的二维列表或数组

我的代码:

  g = torch_geometric.utils.to_networkx(data, to_undirected=True)
  plt.figure(len(data))
  nx.draw(g, pos=dicts, with_labels=True)
  plt.show()

【问题讨论】:

  • 该函数正在寻找每个字典值(节点位置)为 2 项(x 和 y 坐标)的列表或数组。

标签: python graph networkx


【解决方案1】:

如 cmets 中所述,位置应包含 x,y 位置,而您的数据具有更多值。一种方法是应用适当的降维,但作为捷径,下面的脚本只使用前两个值:

import networkx as nx
import numpy as np

data = {
    0: np.array([360, 259, 364, 259, 364, 261, 360, 261]),
    1: np.array([380, 258, 385, 258, 385, 262, 380, 262]),
    2: np.array([365, 258, 370, 258, 370, 262, 365, 262]),
    3: np.array([386, 256, 393, 256, 393, 260, 386, 260]),
}

data_truncated = {k: v[:2] for k, v in data.items()}

G = nx.Graph()
G.add_nodes_from(range(4))

nx.draw(G, pos=data_truncated, with_labels=True)

【讨论】:

  • 前两个值是否足以表示节点的位置(位置)??
  • 这取决于您的具体数据。如果这是一些高维数据,那么最好应用降维。
  • 先生,如果位置坐标如下所示:(1022, 201, 1366, 724)。可以用xy坐标来表示吗??
  • 是的,但是有很多算法可以减少维度,这可能是一个很好的起点:scikit-learn.org/stable/modules/unsupervised_reduction.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
相关资源
最近更新 更多