Programm zum Zeichnen von Gewichten in Kanten, die nicht korrekt funktionieren + Networkx

StackOverflow https://stackoverflow.com/questions/5849878

  •  27-10-2019
  •  | 
  •  

Frage

Ich habe dieses Programm, um eine beschriftete Kante mit den Knoten mit Matplotlib in einem WX -Frame zu zeichnen.

Ich habe es anhand von Beispielen auf der Website kombiniert und von anderen Personen gefragt.

Aber es funktioniert nicht richtig, wenn die Knoten und Kanten gezeichnet werden, aber die Gewichte nicht.

Kann mir jemand helfen, den Grund dafür zu finden ...

import wxversion
wxversion.ensureMinimal('2.8')

import matplotlib

matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas

from matplotlib.backends.backend_wx import NavigationToolbar2Wx

from matplotlib.figure import Figure

import wx

import networkx as nx

class CanvasFrame(wx.Frame):

  def __init__(self):
    wx.Frame.__init__(self,None,-1,
                     'CanvasFrame',size=(550,350))

    self.SetBackgroundColour(wx.NamedColor("WHITE"))

    self.figure = Figure()
    self.axes = self.figure.add_subplot(111)

    self.canvas = FigureCanvas(self, -1, self.figure)

    self.sizer = wx.BoxSizer(wx.VERTICAL)
    self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
    self.SetSizer(self.sizer)
    self.Fit()
    G = nx.Graph()
    G.add_edge(1,3,weight = 5)
    G.add_edge(1,2,weight = 4)   

    pos = nx.spring_layout(G)    
    nx.draw_networkx(G, pos, ax=self.axes)
    edge_labels=dict([((u,v,),d['weight'])
         for u,v,d in G.edges(data=True)])
    nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels)
class App(wx.App):

  def OnInit(self):
    'Create the main window and insert the custom frame'
    frame = CanvasFrame()
    frame.Show(True)

    return True

app = App(0)
app.MainLoop()
War es hilfreich?

Lösung

Anerkennung an Mr Aric Hagberg von NetworkX Community für diese Antwort.

Da ich jedoch davon erfahren habe, dachte ich, ich sollte hier für weitere Benutzer antworten.

Das einzige Problem im obigen Code ist der Code

nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels,ax= self.axes)

Jetzt gibt es gewichtete Kanten innerhalb von WX mit NetworkX.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top