projectmesa / mesa

Mesa is an open-source Python library for agent-based modeling, ideal for simulating complex systems and exploring emergent behaviors.
https://mesa.readthedocs.io
Other
2.38k stars 860 forks source link

Customize network layout, currently only spring layout #2243

Open rmhopkins4 opened 2 weeks ago

rmhopkins4 commented 2 weeks ago

Currently, without implementing a custom drawer, networks are always drawn with the spring layout. A way to customize this would be well appreciated, whether it be in the agent_portrayal or in the model itself (which does somewhat violate the separation of model & visualization).

## matplotlib.py

# draws using networkx's matplotlib integration
def _draw_network_grid(space, space_ax, agent_portrayal):
    graph = space.G
    pos = nx.spring_layout(graph, seed=0)
    nx.draw(
        graph,
        ax=space_ax,
        pos=pos,
        **agent_portrayal(graph),
    )
rht commented 2 weeks ago

What if there is an arbitrary kwargs that you can pass to nx.draw, ax.plot, and so on, to expose their full API?

rht commented 2 weeks ago

Oh, the layout has to be initialized separately from nx.draw, so this needs a separate kwarg.

zjost commented 2 weeks ago

I got around this by just creating a custom viz: https://github.com/projectmesa/mesa-examples/blob/main/examples/aco_tsp/app.py#L39