【问题标题】:Coloring Edges by Value networkX - error edge_color must be a color or list of one color per edge按值 networkX 为边缘着色 - 错误 edge_color 必须是一种颜色或每条边缘一种颜色的列表
【发布时间】:2021-10-09 04:55:51
【问题描述】:

我收到错误"edge_color must be a color or list of one color per edge" 使用下面的代码。数据框genres_grouped 也包含在下面。

# Build a dataframe with your connections
test = pd.DataFrame({'from': genres_grouped['genre_1'],
                     'to': genres_grouped['genre_2'],
                     'value': genres_grouped['owner']})
 
# Build your graph
G=nx.from_pandas_edgelist(test, 'from', 'to', create_using=nx.Graph())
 
# Custom the nodes:
nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500,
        edge_color=test['value'], width=10.0, edge_cmap=plt.cm.Blues)

这是我的DataFramedict 版本:

{'from':
 {4864: 'Rap', 2129: 'Indie Rock', 1394: 'Dance & House',
  2123: 'Indie Rock', 2117: 'Indie Rock', 4827: 'Rap',
  1251: 'Country & Folk', 2284: 'Indie Rock', 2383: 'Indie Rock',
  3978: 'Pop', 4508: 'R&B', 3805: 'Pop', 3954: 'Pop',
  122: 'Alternative', 1484: 'Dance & House', 1388: 'Dance & House',
  1159: 'Country & Folk', 4480: 'R&B', 2739: 'Latin', 4030: 'Pop',
  2204: 'Indie Rock', 2115: 'Indie Rock', 4854: 'Rap', 5814: 'Rock',
  5598: 'Rock', 4595: 'Rap', 1397: 'Dance & House', 4858: 'Rap',
  116: 'Alternative', 4816: 'Rap', 3626: 'Pop', 4856: 'Rap',
  5209: 'Religious', 3823: 'Pop', 4039: 'Pop', 3967: 'Pop',
  3616: 'Pop', 1821: 'Electronica', 1830: 'Electronica',
  2303: 'Indie Rock', 4848: 'Rap', 306: 'Alternative', 4664: 'Rap',
  1827: 'Electronica', 4671: 'Rap', 5592: 'Rock', 3637: 'Pop',
  5718: 'Rock', 5583: 'Rock', 4849: 'Rap'}, 'to': {4864: 'R&B',
  2129: 'Alternative', 1394: 'Electronica', 2123: 'Alternative',
  2117: 'Alternative', 4827: 'Pop', 1251: 'Rock', 2284: 'Pop',
  2383: 'Rock', 3978: 'Rap', 4508: 'Rap', 3805: 'IndieRock',
  3954: 'R&B', 122: 'IndieRock', 1484: 'Pop', 1388: 'Electronica',
  1159: 'Pop', 4480: 'Pop', 2739: '-', 4030: 'Rock', 2204: 'Electronica',
  2115: 'Alternative', 4854: 'R&B', 5814: 'Pop', 5598: 'Alternative',
  4595: '-', 1397: 'Electronica', 4858: 'R&B', 116: 'IndieRock',
  4816: 'Pop', 3626: 'Alternative', 4856: 'R&B', 5209: '-',
  3823: 'IndieRock', 4039: 'Rock', 3967: 'Rap', 3616: '-',
  1821: 'Dance&House', 1830: 'Dance&House', 2303: 'Pop', 4848: 'R&B',
  306: 'Rock', 4664: 'Dance&House', 1827: 'Dance&House',
  4671: 'Dance&House', 5592: 'Alternative', 3637: 'Alternative',
  5718: 'IndieRock', 5583: '-', 4849: 'R&B'
},
 'value': {4864: 15477, 2129: 13102, 1394: 10800, 2123: 9981, 2117: 7233,
  4827: 6895, 1251: 4550, 2284: 4480, 2383: 4366, 3978: 4299, 4508: 3620,
  3805: 3339, 3954: 3075, 122: 2975, 1484: 2961, 1388: 2733, 1159: 2725,
  4480: 2689, 2739: 2660, 4030: 2627, 2204: 2590, 2115: 2561, 4854: 2550,
  5814: 2491, 5598: 2487, 4595: 2328, 1397: 2327, 4858: 2268, 116: 2265,
  4816: 2201, 3626: 2133, 4856: 2129, 5209: 2113, 3823: 2063, 4039: 1895,
  3967: 1837, 3616: 1812, 1821: 1759, 1830: 1726, 2303: 1683, 4848: 1671,
  306: 1671, 4664: 1653, 1827: 1648, 4671: 1646, 5592: 1586, 3637: 1548,
  5718: 1514, 5583: 1493, 4849: 1481
}}

知道为什么我会收到此错误吗?

【问题讨论】:

    标签: python python-3.x matplotlib networkx


    【解决方案1】:

    虽然我的错误消息的文本有点不同,但我相信您会收到错误消息,因为 test['value'] 的形状((50, ))与所需的形状不同。无论您如何指定颜色,传递给的对象的长度都必须与边数相同。 len(G.edges) 输出24

    您缺少的一点是,在使用 nx.Graph() 构建图形时,如果图形中已经存在该边,networkx 不会添加新边。由于您的 'from''to' 列中存在重复对(例如,'from' = 'Rap''to' = 'Pop' 存在多行),因此不会将重复项添加为附加边。

    所以你必须决定两件事:

    1. 是否应该重复行导致额外的平行边缘?如果是这样,那么您需要在构建图表时使用create_using=nx.MultiGraph()

    2. 节点顺序重要吗? IE。 'from' = 'Rap, 'to' = 'Pop''from' = 'Pop', 'to' = 'Rap' 不同吗?如果是这样,那么您需要在构建图表时使用create_using=nx.DiGraph()

    如果两者以上1和2都为真,那么你需要使用create_using=nx.MultiDiGraph()。可视化这些更复杂的图形类型值得自己提出问题,所以我不会在这里描述它。

    不过,一旦您回答了问题 1 和 2,您需要使用输入数据来决定如何可能对 'to''from' 列进行分组并对 value 列求和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 2013-07-12
      相关资源
      最近更新 更多