복붙노트

[PYTHON] networkx - 가장자리 속성에 따라 색상 / 너비 변경 - 일치하지 않는 결과

PYTHON

networkx - 가장자리 속성에 따라 색상 / 너비 변경 - 일치하지 않는 결과

나는 그래프를 올바르게 생성 할 수 있었지만 다음과 같은 두 가지 코드 행에 대해 일관성없는 결과가 더 많이 테스트되었다.

nx.draw_circular(h,edge_color=[h.edge[i][j]['color'] for (i,j) in h.edges_iter()], width=[h.edge[i][j]['width'] for (i,j) in h.edges_iter()])

nx.draw_circular(h,edge_color=list(nx.get_edge_attributes(h,'color').values()), width=list(nx.get_edge_attributes(h,'width').values()))

첫 번째 줄은 일관된 결과를 얻지 만 두 번째 줄은 가장자리의 순서대로 잘못된 색상 / 크기를 생성합니다.

그러나 위의 두 줄은 모두 함수 호출에 의존하여 가장자리의 순서에 따라 특성을 반환합니다. 다른 결과가 나타나는 이유는 무엇입니까?

h [] [] []로 속성에 접근하는 것이 좀 어색 해 보인다. 도트 규칙에 따라 액세스 할 수 있습니까? h.edges ()의 가장자리에 edge.color.

또는 나는 무엇이라도 놓쳤 느냐?

해결법

  1. ==============================

    1.드로잉 기능에 전달 된 가장자리의 순서가 중요합니다. 가장자리 키워드를 사용하여 지정하지 않으면 G.edges ()의 기본 순서를 갖게됩니다. 명시 적으로 다음과 같이 매개 변수를 지정하는 것이 가장 안전합니다.

    드로잉 기능에 전달 된 가장자리의 순서가 중요합니다. 가장자리 키워드를 사용하여 지정하지 않으면 G.edges ()의 기본 순서를 갖게됩니다. 명시 적으로 다음과 같이 매개 변수를 지정하는 것이 가장 안전합니다.

    import networkx as nx
    
    G = nx.Graph()
    G.add_edge(1,2,color='r',weight=2)
    G.add_edge(2,3,color='b',weight=4)
    G.add_edge(3,4,color='g',weight=6)
    
    pos = nx.circular_layout(G)
    
    edges = G.edges()
    colors = [G[u][v]['color'] for u,v in edges]
    weights = [G[u][v]['weight'] for u,v in edges]
    
    nx.draw(G, pos, edges=edges, edge_color=colors, width=weights)
    

    결과는 다음과 같습니다.

  2. from https://stackoverflow.com/questions/25639169/networkx-change-color-width-according-to-edge-attributes-inconsistent-result by cc-by-sa and MIT license