Python 如何在networkx图形的绘图中绘制矩形?

Python 如何在networkx图形的绘图中绘制矩形?,python,matplotlib,networkx,Python,Matplotlib,Networkx,我有一个图,我想绘制,然后添加一些自定义到它。特别是,我想在一些节点组周围绘制框,并编写文本 到目前为止,我还不能让它工作。我读到正确的方法是使用add_patches方法 这是我的非工作代码: import matplotlib.pyplot as plt import networkx as nx from matplotlib.patches import Rectangle f = plt.figure(figsize=(16,10))

我有一个图,我想绘制,然后添加一些自定义到它。特别是,我想在一些节点组周围绘制框,并编写文本

到目前为止,我还不能让它工作。我读到正确的方法是使用add_patches方法

这是我的非工作代码:

    import matplotlib.pyplot as plt   
    import networkx as nx
    from matplotlib.patches import Rectangle

    f = plt.figure(figsize=(16,10))

    G=nx.Graph()
    ndxs = [1,2,3,4]
    G.add_nodes_from(ndxs)
    G.add_weighted_edges_from( [(1,2,0), (1,3,1) , (1,4,-1) , (2,4,1) , (2,3,-1), (3,4,10) ] ) 
    nx.draw(G, nx.spring_layout(G, random_state=100))

    plt.gca().add_patch(Rectangle((50,100),40,30,linewidth=1,edgecolor='b',facecolor='none'))

我的问题是,最后一行似乎没有任何效果。

您的坐标远远超出了窗口。 如果运行
plt.xlim()
(或
plt.ylim()
),您将看到轴的范围接近[-1,1],而您正试图在坐标[50100]处创建一个矩形

import matplotlib.pyplot as plt   
import networkx as nx
from matplotlib.patches import Rectangle

f,ax = plt.subplots(1,1, figsize=(8,5))

G=nx.Graph()
ndxs = [1,2,3,4]
G.add_nodes_from(ndxs)
G.add_weighted_edges_from( [(1,2,0), (1,3,1) , (1,4,-1) , (2,4,1) , (2,3,-1), (3,4,10) ] ) 
nx.draw(G)

ax.add_patch(Rectangle((0,0),0.1,0.1,linewidth=1,edgecolor='b',facecolor='none'))

我不熟悉networkx是如何工作的,所以我不知道是否有办法正确计算所需矩形的坐标。一种方法是以轴坐标(轴的左上角为0,0,右下角为1,1)绘制矩形,而不是数据坐标:

import matplotlib.pyplot as plt   
import networkx as nx
from matplotlib.patches import Rectangle

f,ax = plt.subplots(1,1, figsize=(8,5))

G=nx.Graph()
ndxs = [1,2,3,4]
G.add_nodes_from(ndxs)
G.add_weighted_edges_from( [(1,2,0), (1,3,1) , (1,4,-1) , (2,4,1) , (2,3,-1), (3,4,10) ] ) 
nx.draw(G)

ax.add_patch(Rectangle((0.25,0.25),0.5,0.5,linewidth=1,edgecolor='b',facecolor='none', transform=ax.transAxes))

谢谢。这很有效。我必须补充,真正帮助我的不是改变矩形的位置,而是将第一行更改为“f,ax=plt.subplot(1,1,figsize=(8,5))”。仅仅改变位置是不够的。