Graph route animations
Contributing guidelines
- [X] I understand the contributing guidelines
Documentation
- [X] My proposal is not addressed by the documentation or examples
Existing issues
- [X] Nothing similar appears in an existing issue
What problem does your feature proposal solve?
Allow users to create animated plots of routes on graphs. For routes that cover all or most edges of a graph, a static plot doesn't show the route very clearly.
What is your proposed solution?
Use matplotlib.animations.FuncAnimation to animate route(s) step-by-step.
Either:
- Add a new
osmnx.plot.animate_graph_routefunction for this feature - Add
animate: boolargument to the existingosmnx.plot.plot_graph_routefunction
What alternatives have you considered?
Of course users can implement this themselves outside of osmnx, not sure if this passes the "not trivially easy" criteria from contributing guidelines.
Additional context
I've been using osmnx for a toy project looking at the route inspection problem. Huge thanks for this awesome project, made it easy for me to get started playing with the actual problem quickly instead of writing code to fetch road data and convert it into graphs. For my use case I found that plotting the entire route at once isn't particularly insightful -- my routes always cover the entire graph -- so I implemented animation for myself. Figured it may be useful to others and worth contributing back.
I've technically made a liar of myself by checking the "Nothing similar appears in an existing issue" box. I see two old, closed issues mentioning animation:
- https://github.com/gboeing/osmnx/issues/226
- https://github.com/gboeing/osmnx/issues/109
In #226 the animation piece is only mentioned tangentially, in #109 a user asks for help doing this but doesn't explicitly propose/request a feature.
Can post a brief code snippet with minimal example a bit later today.
Thanks for using OSMnx and suggesting this.
Can post a brief code snippet with minimal example a bit later today.
Sure, would you post the proposed code and I'll take a look?
Of course users can implement this themselves outside of osmnx, not sure if this passes the "not trivially easy" criteria from contributing guidelines.
It's really just a matter of the complexity of the proposed code. Sometimes it's just easier to share a dozen lines of code here in a comment or on StackOverflow for others to reuse than it is to incorporate it into the package, depending on the general applicability of the use case.
Here is a minimal example, taking the route of adding on to the existing plot_graph_route func.
I found it convenient to define update_lines as an inner function so that it could just modify the lines variable defined in the outer scope, but alternatively this could be passed using the functools.partial or by passing fargs to matplotlib.animation.FuncAnimation (although the docs say the later is discouraged).
To make it a bit snazzier I've also played around with:
- Increasing the alpha on all but the leading line segment so that the "trail" left by the route appears faded out. This makes it easier to view routes that double-back on themselves
- Advancing one full graph edge at a time (currently just goes vertex-by-vertex)
- Or, alternatively, interpolating additional vertices along the route to make it look smoother
Interesting idea. It seems better to create a new function like animate_graph_route to keep the API a little cleaner and allow for future enhancement to animation parameters. Do you want to do some refining to get it to a proposed state you like and then open a PR for discussion?
Thank you, @nkleinbaer, for this excellent proposal and @gboeing for the constructive feedback. The idea of animating graph routes is incredibly valuable, especially for visualizing complex paths that cover a significant portion of the graph. It would be a fantastic addition to OSMnx.
I have a few suggestions that might enhance this feature: Adjustable animation speed: Allow users to control the playback speed based on the route's length. Export options: Include the ability to export the animation as a video or GIF for presentations and reports.
If there's interest, I'd be more than happy to contribute to the development.
Hey @Ahmed-Jabrane glad to hear someone else thinks this would be useful. And thanks for bumping this -- I missed @gboeing's reply and let this fall off my radar, sorry about that Geoff. I'll revisit it this this week and get a PR open
Let me know if this is still active or should be closed.
@gboeing just opened a new pr to implement this so we can get this closed out #1285
@jabahm would you like to take a look at #1285 and provide feedback?