从以底图位置为中心的networkx绘制图形

2021-12-08 06:22:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在搜索在一张地图上绘制多个子图,每个子图将位于一个地理位置(或一个绘图的一个坐标)的中心。节点本身没有位置(或者它们都属于一个城市),但是每个子图对应一个局部情况。你知道吗

  • 我试着给每个子图只分配一个节点的位置,剩下的部分用“居中”选项默认地绘制
  • 我试图从https://stackoverflow.com/a/29597209/839119中获得灵感,在一个职位上绘制一个层次结构图,但没有成功

    # -*- coding: utf-8 -*-
    import networkx as nx
    import pygraphviz
    import matplotlib.pyplot as plt
    from mpl_toolkits.basemap import Basemap as Basemap
    
    G1 = nx.Graph()
    G1.add_edge('a', 'b', weight=0.6)
    G1.add_edge('a', 'c', weight=0.2)
    G1.add_edge('c', 'd', weight=0.1)
    G1.add_edge('c', 'e', weight=0.7)
    G1.add_edge('c', 'f', weight=0.9)
    G1.add_edge('a', 'd', weight=0.3)
    
    G2 = nx.Graph()
    G2.add_edge('a', 'b', weight=0.9)
    G2.add_edge('a', 'f', weight=0.5)
    G2.add_edge('c', 'd', weight=0.1)
    G2.add_edge('c', 'e', weight=0.4)
    G2.add_edge('c', 'f', weight=0.2)
    G2.add_edge('a', 'd', weight=0.1)
    
    edges = G.edges()
    weights = [G[u][v]['weight'] for u,v in edges] # liste des poids des edges
    
    fig = plt.figure(figsize=(8, 8))
    m = Basemap(projection='npstere',boundinglat=48,lon_0=270,resolution='l')
    m.etopo(scale=0.5, alpha=0.5)
    mx1,my1=m(-6.266155,53.350140) #would be long, lat coordinates of city 1
    mx2,my2=m(-21.827774, 64.128288) #would be long, lat coordinates of city 2
    
    nx.draw_networkx(G1,center=(mx1,my1),pos=nx.spring_layout(G1),node_size=200,node_color='green')
    nx.draw_networkx(G2,center=(mx2,my2),pos=nx.spring_layout(G2),node_size=200,node_color='red')
    plt.title("North Polar Stereographic Projection")
    plt.show()