A python library to render Sumo network files and trajectories with matplotlib.
Project description
SumoNetVis
A Python library for visualizing a Sumo network and trajectories with matplotlib.
Basic trajectory plotting from FCD outputs is built in, but it is also possible to plot custom data and graphics on top of the network with the full flexibility and power of matplotlib and other compatible libraries, such as seaborn.
Installation
This package can be installed via pip with the command pip install SumoNetVis
.
You can then import the library with:
import SumoNetVis
Dependencies
- shapely
- matplotlib
- numpy
Usage
To plot a Sumo net file and trajectories, you can use the following code:
import SumoNetVis
import matplotlib.pyplot as plt
# Plot Sumo Network
net = SumoNetVis.Net("path/to/yourfile.net.xml")
net.plot()
# Plot trajectories
trajectories = SumoNetVis.Trajectories("path/to/fcd-output.xml")
trajectories["vehicle_id"].assign_colors_speed()
trajectories["vehicle_id"].plot()
# Show figure
plt.show()
You also have the option of passing a matplotlib Axes object to the plot methods.
Animation
Instead of visualizing Trajectories as lines, an animation can be generated using the matplotlib.animation
module.
import matplotlib.animation as animation
trajectories = SumoNetVis.Trajectories("path/to/fcd-output.xml")
fig, ax = plt.subplots()
a = animation.FuncAnimation(fig, trajectories.plot_points, frames=trajectories.timestep_range(), repeat=False,
interval=1000*trajectories.timestep, fargs=(ax,), blit=True)
plt.show()
The plot settings for each vehicle can be customized and the color of each point can be animated, as shown in the following example.
for trajectory in trajectories:
trajectory.assign_colors_speed()
trajectory.point_plot_kwargs["ms"] = 8 # set marker size. Can set any kwargs taken by matplotlib.pyplot.plot().
In order to animate the color of the points based on the assigned color scheme, an additional farg must be passed when creating the animation.
a = animation.FuncAnimation(fig, trajectories.plot_points, frames=trajectories.timestep_range(), repeat=False,
interval=1000*trajectories.timestep, fargs=(ax, True), blit=True)
Contribution
Issues and pull requests are welcome.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.