projectmesa / mesa-examples

Seminal agent-based models developed using Mesa
Other
105 stars 123 forks source link

Improve boid flockers (Solara) visualisation with direction and colors #86

Open EwoutH opened 5 months ago

EwoutH commented 5 months ago

The boid flockers example can be improved with (Solara) visualisation that includes the direction and colors for the boids. It would be nice to have an arrow-like shape to know the direction, and either random colors or to let them take the colors of a group/leader.

Here's an example, in matplotlib, from an old exam we used:

Screenshot_351

# set the colormap we will use for plotting
bwr = plt.get_cmap("gist_rainbow")

def draw_boids(model):
    x_vals = []
    y_vals = []
    u_vals = []
    v_vals = []
    colors = []  # List to hold the color for each agent

    # Generate unique colors with saturation and transparency
    # Use a colormap with high saturation, such as "hsv"
    cmap = plt.get_cmap("hsv")
    n_agents = len(model.schedule.agents)
    color_indices = np.linspace(0, 1, n_agents)

    for i, boid in enumerate(model.schedule.agents):
        x, y = boid.pos
        u, v = boid.direction_vector
        x_vals.append(x)
        y_vals.append(y)
        u_vals.append(u)
        v_vals.append(v)

        # Assign a color with transparency; alpha value less than 1 introduces transparency
        colors.append(cmap(color_indices[i])[:3] + (0.6,))  # Change 0.6 to the desired transparency

    fig = plt.figure(figsize=(7, 7))
    ax = fig.add_subplot(111)

    # Use quiver with colors
    q = ax.quiver(x_vals, y_vals, u_vals, v_vals, color=colors, angles='xy', pivot='mid',
                  headaxislength=8, headlength=10, headwidth=7, scale=35)

    # The call to `embed_identity` is not changed.
    embed_identity(ax, student_name, student_number)

draw_boids(model)
EwoutH commented 5 months ago

@quaquel you might also find this interesting for your exam model.

(also Igor recently based an exam on the Boid model, if you want some inspiration)