【问题标题】:Curved edges in NetworkXNetworkX 中的弯曲边缘
【发布时间】:2020-09-16 10:49:30
【问题描述】:

我的networkx 图表目前有以下代码:

import matplotlib.pyplot as plt
import networkx as nx


g = nx.Graph()
# add edges
g.add_edge("a", "b", weight=0.6)
g.add_edge("a", "c", weight=0.2)
g.add_edge("c", "d", weight=0.1)
g.add_edge("c", "e", weight=0.7)
g.add_edge("c", "f", weight=0.9)
g.add_edge("a", "d", weight=0.3)
# group edges by attribute "weight"
elarge = [
    (u, v) for (u, v, d) in g.edges(data=True)
    if d["weight"] > 0.5]
esmall = [
    (u, v) for (u, v, d) in g.edges(data=True)
    if d["weight"] <= 0.5]
# compute the positions of nodes
pos = nx.circular_layout(g)
# plot the graph nodes
nx.draw_networkx_nodes(g, pos, node_size=700)
# plot the graph edges
nx.draw_networkx_edges(g, pos, edgelist=elarge, width=6)
nx.draw_networkx_edges(
    g, pos, edgelist=esmall, width=6,
    alpha=0.5, edge_color="b", style="dashed")
# annotate the nodes
nx.draw_networkx_labels(
    g, pos, font_size=20, font_family="sans-serif")
# graphics config
plt.axis("off")
plt.show()  # wait before exiting

输出如下:

但我想要的是让连接线弯曲而不是笔直。我在matplotlib 中找不到允许我这样做的线条样式。

【问题讨论】:

    标签: python matplotlib networkx


    【解决方案1】:

    类似于this answer,你可以这样做:

    plt.figure(figsize=(15,8))
    
    pos = nx.circular_layout(G)  # positions for all nodes
    
    ax = plt.gca()
    
    for edge in G.edges():
        source, target = edge
        rad = 0.2
        c = edge in elarge
        arrowprops=dict(arrowstyle="-", 
                        color='black' if c else 'blue',
                        connectionstyle=f"arc3,rad={rad}",
                        linestyle= '-' if c else '--',
                        alpha=0.6,
                        linewidth=5)
        ax.annotate("",
                    xy=pos[source],
                    xytext=pos[target],
                    arrowprops=arrowprops
                   )
    # nodes
    nx.draw_networkx_nodes(G, pos, node_size=700, node_color='black')
    # labels
    nx.draw_networkx_labels(G, pos, font_size=20, 
                            font_family="sans-serif", 
                            font_color ='white')
    
    plt.box(False)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2021-01-21
      相关资源
      最近更新 更多