Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
566b72f
renamed make_space_altair
nissu99 Jan 26, 2025
e1f947c
added make_altair_plot_component support
nissu99 Jan 26, 2025
9e3a625
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 26, 2025
a88d816
Update altair_components.py
nissu99 Jan 27, 2025
c579f81
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 27, 2025
489c0fd
Merge branch 'main' into main
nissu99 Jan 27, 2025
95a607b
Update altair_components.py
nissu99 Jan 27, 2025
8e1779b
Update pyproject.toml
nissu99 Jan 27, 2025
2b69a62
Update altair_components.py
nissu99 Jan 27, 2025
b5613f1
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 27, 2025
0d1b8be
Update altair_components.py
nissu99 Jan 27, 2025
ed8ca71
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 27, 2025
da8fd53
Update altair_components.py
nissu99 Jan 27, 2025
24210f4
Merge branch 'main' into main
nissu99 Jan 31, 2025
4a38eef
blank
nissu99 Jan 31, 2025
c49f864
resolved conflicts
nissu99 Jan 31, 2025
97de970
Merge branch 'main' into main
nissu99 Jan 31, 2025
0621810
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 31, 2025
7bdbc18
Merge branch 'main' into main
quaquel Feb 2, 2025
a380bc6
Merge branch 'main' into main
quaquel Feb 5, 2025
227262c
changed to switch statements
nissu99 Feb 11, 2025
c61808f
switch cases added
nissu99 Feb 11, 2025
e6be172
Merge branch 'main' into main
nissu99 Feb 11, 2025
b024b32
resolves
nissu99 Feb 11, 2025
cd7cbc6
Merge branch 'main' into main
quaquel Feb 16, 2025
0a37307
changes regarding updating agent position and docs
nissu99 Feb 16, 2025
4d1bd06
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 16, 2025
d6e96b0
resize fix
nissu99 Feb 17, 2025
54daa24
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 17, 2025
3d53d52
removed unused parameter
nissu99 Feb 18, 2025
329bd24
removed generic_data_collection function
nissu99 Feb 18, 2025
a29c557
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 18, 2025
0631373
fixed altiar plotting
nissu99 Mar 1, 2025
22044f6
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Mar 1, 2025
0f6238c
extraction logic changes
nissu99 Mar 9, 2025
c557595
extraction changes
nissu99 Mar 9, 2025
ec7dc70
small
nissu99 Mar 9, 2025
348939a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Mar 9, 2025
b0192a6
docstring
nissu99 Mar 9, 2025
6d95380
Merge branch 'main' of https://github.com/nissu99/mesa
nissu99 Mar 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
  • Loading branch information
pre-commit-ci[bot] committed Jan 26, 2025
commit 9e3a62580c70aa52e16d76809e793743fd4513d8
4 changes: 2 additions & 2 deletions mesa/visualization/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
)

from .components import make_plot_component, make_space_component
from .components.altair_components import make_space_altair,make_altair_plot_component
from .components.altair_components import make_altair_plot_component, make_space_altair
from .solara_viz import JupyterViz, SolaraViz
from .user_param import Slider

Expand All @@ -20,8 +20,8 @@
"Slider",
"SolaraViz",
"draw_space",
"make_altair_plot_component",
"make_plot_component",
"make_space_altair",
"make_altair_plot_component",
"make_space_component",
]
6 changes: 5 additions & 1 deletion mesa/visualization/components/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@

from collections.abc import Callable

from .altair_components import SpaceAltair, make_altair_space,make_altair_plot_component
from .altair_components import (
SpaceAltair,
make_altair_plot_component,
make_altair_space,
)
from .matplotlib_components import (
SpaceMatplotlib,
make_mpl_plot_component,
Expand Down
92 changes: 50 additions & 42 deletions mesa/visualization/components/altair_components.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"""Altair based solara components for visualization mesa spaces."""

import contextlib
from typing import Callable
import warnings
import solara
from collections.abc import Callable

import solara

with contextlib.suppress(ImportError):
import altair as alt
Expand All @@ -24,9 +24,9 @@ def make_space_altair(*args, **kwargs): # noqa: D103


def make_altair_space_component(*args, **kwargs):

return make_altair_space(*args, **kwargs)


def make_altair_space(
agent_portrayal, propertylayer_portrayal, post_process, **space_drawing_kwargs
):
Expand Down Expand Up @@ -56,7 +56,6 @@ def MakeSpaceAltair(model):
return MakeSpaceAltair



def make_altair_plot_component(
measure: str | dict[str, str] | list[str] | tuple[str],
post_process: Callable | None = None,
Expand All @@ -77,14 +76,12 @@ def make_altair_plot_component(
Returns:
function: A function that creates a PlotAltair component
"""

def MakePlotAltair(model):
return PlotAltair(
model,
measure,
post_process=post_process,
width=width,
height=height
model, measure, post_process=post_process, width=width, height=height
)

return MakePlotAltair


Expand All @@ -97,64 +94,75 @@ def PlotAltair(
height: int = 300,
) -> solara.FigureAltair:
"""Create an Altair plot for model."""

update_counter.get()
df = model.datacollector.get_model_vars_dataframe().reset_index()

if isinstance(measure, str):
# Single measure - no transformation needed
chart = alt.Chart(df).encode(
x='Step:Q',
y=alt.Y(f'{measure}:Q', title=measure),
tooltip=[alt.Tooltip('Step:Q'), alt.Tooltip(f'{measure}:Q')]
).mark_line()
chart = (
alt.Chart(df)
.encode(
x="Step:Q",
y=alt.Y(f"{measure}:Q", title=measure),
tooltip=[alt.Tooltip("Step:Q"), alt.Tooltip(f"{measure}:Q")],
)
.mark_line()
)

elif isinstance(measure, (list, tuple)):
# Multiple measures - melt dataframe
value_vars = list(measure)
melted_df = df.melt('Step', value_vars=value_vars,
var_name='Measure', value_name='Value')

chart = alt.Chart(melted_df).encode(
x='Step:Q',
y=alt.Y('Value:Q'),
color='Measure:N',
tooltip=['Step:Q', 'Value:Q', 'Measure:N']
).mark_line()
melted_df = df.melt(
"Step", value_vars=value_vars, var_name="Measure", value_name="Value"
)

chart = (
alt.Chart(melted_df)
.encode(
x="Step:Q",
y=alt.Y("Value:Q"),
color="Measure:N",
tooltip=["Step:Q", "Value:Q", "Measure:N"],
)
.mark_line()
)

elif isinstance(measure, dict):
# Dictionary with colors - melt dataframe
value_vars = list(measure.keys())
melted_df = df.melt('Step', value_vars=value_vars,
var_name='Measure', value_name='Value')

melted_df = df.melt(
"Step", value_vars=value_vars, var_name="Measure", value_name="Value"
)

# Create color scale from measure dict
domain = list(measure.keys())
range_ = list(measure.values())

chart = alt.Chart(melted_df).encode(
x='Step:Q',
y=alt.Y('Value:Q'),
color=alt.Color('Measure:N', scale=alt.Scale(domain=domain, range=range_)),
tooltip=['Step:Q', 'Value:Q', 'Measure:N']
).mark_line()


chart = (
alt.Chart(melted_df)
.encode(
x="Step:Q",
y=alt.Y("Value:Q"),
color=alt.Color(
"Measure:N", scale=alt.Scale(domain=domain, range=range_)
),
tooltip=["Step:Q", "Value:Q", "Measure:N"],
)
.mark_line()
)

else:
raise ValueError("Unsupported measure type")

# Configure chart properties
chart = chart.properties(
width=width,
height=height
).configure_axis(
grid=True
)
chart = chart.properties(width=width, height=height).configure_axis(grid=True)

if post_process is not None:
chart = post_process(chart)

return solara.FigureAltair(chart)


@solara.component
def SpaceAltair(model, agent_portrayal, dependencies: list[any] | None = None):
"""Create an Altair-based space visualization component.
Expand Down
Loading