matplotlib Networkx绘图-根据边缘的颜色绘制边缘标签

nhjlsmyf  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(248)

是否可以根据标签所属边缘的颜色对标签文本着色?我尝试使用font_color执行此操作,但出现以下错误:ValueError: dict_values(['r', 'g', 'b', 'm', .... 'y']) is not a valid value for color .
我的绘图现在看起来像这样:

  1. colors = nx.get_edge_attributes(graph, 'color').values()
  2. nx.draw_networkx(graph, pos, with_labels=True, connectionstyle='arc3, rad = 0.1', edge_color=colors)
  3. edge_labels_bidirectional = dict([((u, v,), d['initial_balance'])
  4. for u, v, d in graph.edges(data=True)])
  5. nx.draw_networkx_edge_labels(graph, pos, edge_labels=edge_labels_bidirectional,
  6. label_pos=0.3, font_size=7)
  7. plt.show()

0md85ypi

0md85ypi1#

由于nx.draw_networkx_edge_labels只接受一个字符串作为font_color参数(而不是列表或字典,doc here),因此必须为每条边调用nx.draw_networkx_edge_labels,并使用相应的颜色分别绘制每个标签。
请参见以下代码(网络从此处改编):

  1. import networkx as nx
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. G = nx.Graph()
  5. G.add_edge(1, 2)
  6. G.add_edge(1, 3)
  7. G.add_edge(1, 5)
  8. G.add_edge(2, 3)
  9. G.add_edge(3, 4)
  10. G.add_edge(4, 5)
  11. pos = {1: (0, 0), 2: (-1, 0.3), 3: (2, 0.17), 4: (4, 0.255), 5: (5, 0.03)}
  12. cmap=plt.cm.viridis(np.linspace(0,1,G.number_of_edges()))
  13. nx.draw_networkx(G, pos,with_labels=True)
  14. nx.draw_networkx_edges(G, pos,edge_color=cmap)
  15. [nx.draw_networkx_edge_labels(G,pos,edge_labels={e:i},font_color=cmap[i]) for i,e in enumerate(G.edges())]

展开查看全部

相关问题