Skip to content

Commit

Permalink
doc: add example, interval selection on a map (#3275)
Browse files Browse the repository at this point in the history
* add example

* single ticks to quotes

* move geopandas from doc to dev inc mypy settings
  • Loading branch information
mattijn authored Nov 27, 2023
1 parent aefce42 commit 13d2cc6
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 2 deletions.
5 changes: 3 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ dev = [
"types-setuptools",
"pyarrow>=11",
"vegafusion[embed]>=1.4.0",
"anywidget"
"anywidget",
"geopandas",
]
doc = [
"sphinx",
Expand All @@ -82,7 +83,6 @@ doc = [
"numpydoc",
"pillow>=9,<10",
"pydata-sphinx-theme>=0.14.1",
"geopandas",
"myst-parser",
"sphinx_copybutton",
"sphinx-design",
Expand Down Expand Up @@ -216,6 +216,7 @@ module = [
"yaml.*",
"vl_convert.*",
"pandas.lib.*",
"geopandas.*",
"nbformat.*",
"ipykernel.*",
"m2r.*",
Expand Down
62 changes: 62 additions & 0 deletions tests/examples_arguments_syntax/interval_selection_map_quakes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
"""
Interval Selection on a Map
===========================
This is an example of a binned bar chart on the right where the filtered overlay
is adjusted by interacting with the map on the left.
"""
# category: interactive charts
import altair as alt
from vega_datasets import data
import geopandas as gpd

# load data
gdf_quakies = gpd.read_file(data.earthquakes.url, driver="GeoJSON")
gdf_world = gpd.read_file(data.world_110m.url, driver="TopoJSON")

# defintion for interactive brush
brush = alt.selection_interval(
encodings=["longitude"],
empty=False,
value={"longitude": [-50, -110]}
)

# world disk
sphere = alt.Chart(alt.sphere()).mark_geoshape(
fill="transparent", stroke="lightgray", strokeWidth=1
)

# countries as shapes
world = alt.Chart(gdf_world).mark_geoshape(
fill="lightgray", stroke="white", strokeWidth=0.1
)

# earthquakes as dots on map
quakes = alt.Chart(gdf_quakies).transform_calculate(
lon="datum.geometry.coordinates[0]",
lat="datum.geometry.coordinates[1]",
).mark_circle(opacity=0.35, tooltip=True).encode(
longitude="lon:Q",
latitude="lat:Q",
color=alt.condition(brush, alt.value("goldenrod"), alt.value("steelblue")),
size=alt.Size("mag:Q", scale=alt.Scale(type="pow", range=[1, 1000], domain=[0, 7], exponent=4)),
).add_params(brush)

# combine layers for the map
left_map = alt.layer(sphere, world, quakes).project(type="mercator")

# histogram of binned earthquakes
bars = alt.Chart(gdf_quakies).mark_bar().encode(
x=alt.X("mag:Q").bin(extent=[0,7]),
y="count(mag):Q",
color=alt.value("steelblue")
)

# filtered earthquakes
bars_overlay = bars.encode(color=alt.value("goldenrod")).transform_filter(brush)

# combine layers for histogram
right_bars = alt.layer(bars, bars_overlay)

# vertical concatenate map and bars
left_map | right_bars
62 changes: 62 additions & 0 deletions tests/examples_methods_syntax/interval_selection_map_quakes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
"""
Interval Selection on a Map
===========================
This is an example of a binned bar chart on the right where the filtered overlay
is adjusted by interacting with the map on the left.
"""
# category: interactive charts
import altair as alt
from vega_datasets import data
import geopandas as gpd

# load data
gdf_quakies = gpd.read_file(data.earthquakes.url, driver="GeoJSON")
gdf_world = gpd.read_file(data.world_110m.url, driver="TopoJSON")

# defintion for interactive brush
brush = alt.selection_interval(
encodings=["longitude"],
empty=False,
value={"longitude": [-50, -110]}
)

# world disk
sphere = alt.Chart(alt.sphere()).mark_geoshape(
fill="transparent", stroke="lightgray", strokeWidth=1
)

# countries as shapes
world = alt.Chart(gdf_world).mark_geoshape(
fill="lightgray", stroke="white", strokeWidth=0.1
)

# earthquakes as dots on map
quakes = alt.Chart(gdf_quakies).transform_calculate(
lon="datum.geometry.coordinates[0]",
lat="datum.geometry.coordinates[1]",
).mark_circle(opacity=0.35, tooltip=True).encode(
longitude="lon:Q",
latitude="lat:Q",
color=alt.condition(brush, alt.value("goldenrod"), alt.value("steelblue")),
size=alt.Size("mag:Q").scale(type="pow", range=[1, 1000], domain=[0, 7], exponent=4),
).add_params(brush)

# combine layers for the map
left_map = alt.layer(sphere, world, quakes).project(type="mercator")

# histogram of binned earthquakes
bars = alt.Chart(gdf_quakies).mark_bar().encode(
x=alt.X("mag:Q").bin(extent=[0,7]),
y="count(mag):Q",
color=alt.value("steelblue")
)

# filtered earthquakes
bars_overlay = bars.encode(color=alt.value("goldenrod")).transform_filter(brush)

# combine layers for histogram
right_bars = alt.layer(bars, bars_overlay)

# vertical concatenate map and bars
left_map | right_bars

0 comments on commit 13d2cc6

Please sign in to comment.