jsexauer / networkx_viewer

Interactive GUI for NetworkX graphs
GNU General Public License v3.0
137 stars 27 forks source link

Suggestions #1

Open kurba opened 10 years ago

kurba commented 10 years ago

Hi,

Great project! This is the first time I see a GUI that let people interface with a neworkx graph.

Just a few ideas:

jsexauer commented 10 years ago

Hi Kurba,

Thanks for your feedback! Regarding your comments:

jsexauer commented 10 years ago

The latest build has the ability to display attributes for nodes and edges in a panel on the right.

jvahue commented 8 years ago

This is a great project and if you need some help let me know. Here is my first impression:

  1. panning works great
  2. Zooming (Zoon) not so good, it leaves old edges and you can't get rid of them. Seems like they are on the edges where one of the node on the edge is only connected via that edge.
  3. I could live with (2) if there was a canvas refresh - which there is "Redraw Plot" - except that this re-scales it and moves everything around losing the beautiful view of the graph I had just setup. Why not just clear the canvas and redraw it? Maybe call it "Refresh Plot" to keep the old functionality.
  4. When first drawn and subsequent redraws my entire network is not within view.
  5. It would great if we could save and restore the positions of the nodes in a file.
    • Zooming worked on a very simple network I made on the fly vs my "real" network.
jvahue commented 8 years ago

v1.10 Ok here is the problem. I have a DiGraph (oh that was another wish to get an arrow or whatever for Directional graphs) where two nodes point to each other.

nw = nx.DiGraph() nw.add_edges_from([(1,2), (2,3), (2,4), (1,4), (3,5), (3,2)]) app = Viewer(nw) app.mainloop()

In a DiGraph 2->3 and 3->2 so the first zoom cause the problem. Maybe both edges get drawn but only one is zoomed.

Here is a quick hack to fix this in GraphCanvas._plot_graph:

        # remove redundant edges
        e0 = graph.edges()
        e1 = []
        for f,t in e0:
            if (f,t) not in e1 and (t,f) not in e1:
                e1.append((f,t))

        # Create edges
        #for frm, to in set(graph.edges()):
        for frm, to in set(e1):
            self._draw_edge(frm, to)
jsexauer commented 8 years ago

Thanks jvahue. I actually have some code to save and restore the view written I can merge back into the project. I'll try to do that this weekend. I'll also look at your other issues.