xgi-org / xgi

CompleX Group Interactions (XGI) is a Python package for higher-order networks.
https://xgi.readthedocs.io
Other
187 stars 32 forks source link

Allow `draw_nodes` to accept an iterable as the first argument. #508

Open nwlandry opened 9 months ago

nwlandry commented 9 months ago

It should be possible to draw nodes without supplying a hypergraph, since if you have the node IDs and corresponding positions, you can draw the nodes. If the user provides a Hypergraph, that allows them to access nodestats and the ability to do a spring layout without providing node positions. I think that one could get around this by selecting the positions at random if the user supplies an iterable of nodes without corresponding positions.

The reason why this could be necessary is that in the draw_bipartite function, when drawing the edge markers, the draw_nodes takes the dual of the hypergraph as an argument, which seems like unnecessary computation.

maximelucas commented 3 months ago

A workaround to this could be to use a trivial Hypergraph for this. Actually our current function does not allow to pass a list of nodes for this (only a number of nodes), but we could either that option to xgi.trivial_hypergraph() or if you have your list of nodes, you could do it manually

H = xgi.Hypergraph()
H.add_nodes_from(nodes)

This way we don't need to touch draw_nodes()? I think I used this trick is some (maybe since then overwritten) version of the bipartite drawing.