Как нарисовать прямоугольники на графике графа сети? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть график, который я хочу построить, а затем добавить к нему некоторые настройки.В частности, я хочу нарисовать рамки вокруг некоторых групп узлов и написать текст.

До сих пор я не мог заставить его работать.Я прочитал, что правильный способ сделать это будет использовать метод 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'))

Моя проблема в том, что последняя строка, похоже, не имеет никакого эффекта.

1 Ответ

0 голосов
/ 26 февраля 2019

Ваши координаты далеко за окном.Если вы запустите plt.xlim() (или plt.ylim()), вы увидите, что экстент осей близок к [-1,1], в то время как вы пытаетесь создать прямоугольник с координатами [50,100].

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'))

enter image description here

Я не знаю, как работает 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))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...