Programm zum Zeichnen von Gewichten in Kanten, die nicht korrekt funktionieren + Networkx
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()
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