Wind Vector Map#
An example showing a vector array map showing wind speed and direction using wedge
as shape for mark_point
and angle
encoding for the wind direction.
This is adapted from this corresponding Vega-Lite Example:
Wind Vector Map
with an added base map.
import altair as alt
from vega_datasets import data
df_wind = data.windvectors()
data_world = alt.topo_feature(data.world_110m.url, "countries")
wedge = alt.Chart(df_wind).mark_point(shape="wedge", filled=True).encode(
alt.Latitude("latitude"),
alt.Longitude("longitude"),
alt.Color("dir")
.scale(domain=[0, 360], scheme="rainbow")
.legend(None),
alt.Angle("dir").scale(domain=[0, 360], range=[180, 540]),
alt.Size("speed").scale(rangeMax=500)
).project("equalEarth")
xmin, xmax, ymin, ymax = (
df_wind.longitude.min(),
df_wind.longitude.max(),
df_wind.latitude.min(),
df_wind.latitude.max(),
)
# extent as feature or featurecollection
extent = {
"type": "Feature",
"geometry": {"type": "Polygon",
"coordinates": [[
[xmax, ymax],
[xmax, ymin],
[xmin, ymin],
[xmin, ymax],
[xmax, ymax]]]
},
"properties": {}
}
# use fit combined with clip=True
base = (
alt.Chart(data_world)
.mark_geoshape(clip=True, fill="lightgray", stroke="black", strokeWidth=0.5)
.project(type="equalEarth", fit=extent)
)
base + wedge
import altair as alt
from vega_datasets import data
df_wind = data.windvectors()
data_world = alt.topo_feature(data.world_110m.url, "countries")
wedge = (
alt.Chart(df_wind)
.mark_point(shape="wedge", filled=True)
.encode(
latitude="latitude",
longitude="longitude",
color=alt.Color(
"dir", scale=alt.Scale(domain=[0, 360], scheme="rainbow"), legend=None
),
angle=alt.Angle("dir", scale=alt.Scale(domain=[0, 360], range=[180, 540])),
size=alt.Size("speed", scale=alt.Scale(rangeMax=500)),
)
.project("equalEarth")
)
xmin, xmax, ymin, ymax = (
df_wind.longitude.min(),
df_wind.longitude.max(),
df_wind.latitude.min(),
df_wind.latitude.max(),
)
# extent as feature or featurecollection
extent = {
"type": "Feature",
"geometry": {"type": "Polygon",
"coordinates": [[
[xmax, ymax],
[xmax, ymin],
[xmin, ymin],
[xmin, ymax],
[xmax, ymax]]]
},
"properties": {}
}
# use fit combined with clip=True
base = (
alt.Chart(data_world)
.mark_geoshape(clip=True, fill="lightgray", stroke="black", strokeWidth=0.5)
.project(type="equalEarth", fit=extent)
)
base + wedge