-
Notifications
You must be signed in to change notification settings - Fork 892
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Visualisation: Allow specifying Agent shapes in agent_portrayal #2214
Conversation
"shape" in agent_portrayal corresponds to "marker" in matplotlib's scatter function.
Performance benchmarks:
|
Implementation LGTM, thank you for implementing this feature. I could test it on the Epstein civil violence model if I have the time. But if you don't mind, showing that the jailed citizens as square in that example would be helpful. You can used the code from projectmesa/mesa-examples#158 and undo the experimental data collector part. |
Previously, if only some agent_portrayals provided info like size, color, matplotlib would not accept the parameters and the program would crash. Additionally, edited some names for coherence.
Performance benchmarks:
|
Thanks a lot for this PR! I will review it somewhere tomorrow. |
error message shows public names of visualization attributes. default color and marker fixed to "tab:blue" & "o" respectively
for more information, see https://pre-commit.ci
@rht could you give a short summary what you already have sufficiently reviewed and what could use a second pair of eyes? |
Actually, this PR is already LGTM, and I didn't merge because you still wanted to review. If any, maybe the perf consideration of an array of defaults instead of a single default value scalar, but this is minor because any loop done without calling Matplotlib many times is going to be fast. |
Thanks. I would have expected this feature taking less complexity / lines of code, let me take a closer look tomorrow morning. |
Okay, I'm largely good with this PR. It's a bit weird matplotlib/matplotlib#11155 was never implemented, but since the only thing changes for our users is that they can now optionally pass a matplotlib shape in a I would like the documentation around this PR to improve a little:
|
Yes, it's optional and is not a breaking change. While it's good to update the docstring now, I think the tutorial change can happen in a separate PR. Otherwise it makes Mesa too bureaucratic to contribute to (that every new feature needs to be in the tutorial in the same PR). |
Yeah I see your perspective and also considered that. But otherwise I'm afraid it doesn't get done. Especially with our user base changes need to be (very) visible. @rmhopkins4 let me know if you want to do these things yourself, or otherwise allow us to do it within this PR. |
You should have the ability to edit the PR already, no? |
Yes I do, but I don't prefer to edit other peoples PRs without their explicit permission :) |
@rmhopkins4 Could you let me know if you want to take up (any of) the remaining points yourself, or if you want us as maintainers to do it? |
I can take up the remaining points. If I understand correctly it's just documentation-related. |
Perfect, and that’s correct! |
Viz tutorial now mentions that in addition to size and color, default drawer allows for custom shape.
Is there a docstring that currently mentions the available options for the |
I think you’re right, it’s weird we don’t have that documented. It might have gone lost with the transition from the old to the new visualization. I think this would be the most logical place to add it: mesa/mesa/visualization/solara_viz.py Line 106 in 3cf1b76
But is also shows how important PR, release and tutorial documentation is - that’s how users discover new features! |
@rmhopkins4 are you done working on it? It looks good! |
@rmhopkins4 I'm ready to merge. Could you add the portrayal code you used to the first PR post? |
Congratulations of getting your first PR into Mesa @rmhopkins4! |
@rmhopkins4 would you like to update a few example models to use the shapes? If so, this issue includes a list of models already using the new visualization: |
This PR allows specifying an
"shape"
in theagent_portrayal
dictionary used by matplotlib component of the Solara visualisation. In short, it allows you represent an Agent in any matplotlib marker, by adding a "shape" key-value pair to theagent_portrayal
dictionary.This is especially useful when you're using the default shape drawer for grid or continuous space.
For example:
Partial resolution of #2164.
Examples
In Conway's Game of Life life, you can now use black squares for the agents, as how it's traditionally displayed:
You can also conditionally modify the shape, just like you can with the color and size: