xgi-org / xgi

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

`rescale_sizes` doesn't work for numerical inputs #527

Open nwlandry opened 6 months ago

nwlandry commented 6 months ago

Minimal working example:

import xgi
H = xgi.Hypergraph([[1, 2, 3]])
nodal_property = [-1, 0, 1]
xgi.draw(H, node_size=nodal_property, rescale_sizes=True)

gives the error ValueError: node_size cannot contain negative values. We should make this consistent with how xgi handles nodestats, i.e., interpolating them between max and min values.

maximelucas commented 6 months ago

Do you mean that you would like the -1 to be rescaled to a positive value? I feel like any negative value for a node size is wrong and should raise an error rather than be rescaled, but happy to be convinced.

nwlandry commented 5 months ago

Maybe a work-around solution would be to publish a recipe detailing how to take a list of nodal values (In my case, continuous values between -1 and 1) and mapping them to node sizes. I probably would do something like

import xgi
import numpy as np
min_node_size = 1
max_node_size = 30

H = xgi.Hypergraph([[1, 2, 3]])
props = np.random.uniform(-1, 1, H.num_nodes)
node_size = np.interp(props, [props.min(), props.max()], [min_node_size, max_node_size])
xgi.draw(H, node_size=node_size)
maximelucas commented 5 months ago

Yea we can probably do that. My feeling is that I would probably rather visualize that by having colored nodes with a diverging colormap to visualize positive and negative values. What's your exact use case? An interpolation recipe is useful in any case I would say.