Point#
point mark represents each data point with a symbol. Point marks are commonly used in visualizations like scatter plots.
Point Mark Properties#
Click to show code
import altair as alt
from vega_datasets import data
source = data.cars()
shape_select = alt.binding_select(
options=[
"arrow",
"circle",
"square",
"cross",
"diamond",
"triangle",
"triangle-up",
"triangle-down",
"triangle-right",
"triangle-left",
"wedge",
"stroke",
"M-1,-1H1V1H-1Z",
"M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6,.8L0,.5Z",
],
name="shape",
)
shape_var = alt.param(bind=shape_select, value="circle")
angle_slider = alt.binding_range(min=-360, max=360, step=1, name="angle")
angle_var = alt.param(bind=angle_slider, value=0)
size_slider = alt.binding_range(min=0, max=500, step=10, name="size")
size_var = alt.param(bind=size_slider, value=50)
strokeWidth_slider = alt.binding_range(min=0, max=10, step=0.5, name="strokeWidth")
strokeWidth_var = alt.param(bind=strokeWidth_slider, value=2)
alt.Chart(source).mark_point(
shape=shape_var,
angle=angle_var,
size=size_var,
strokeWidth=strokeWidth_var,
).encode(x="Horsepower:Q", y="Miles_per_Gallon:Q").add_params(
shape_var, angle_var, size_var, strokeWidth_var
)
A point mark definition can contain any standard mark properties
and the following special properties:
Click to show table
Property |
Type |
Description |
|---|---|---|
shape |
anyOf(anyOf( |
Shape of the point marks. Supported values include:
Default value: |
size |
anyOf( |
Default size for marks.
Default value:
|
Examples#
Dot Plot#
Mapping a field to either only x or only y of point marks creates a dot plot.
import altair as alt
from vega_datasets import data
source = data.movies()
alt.Chart(source).mark_point().encode(
x="IMDB_Rating:Q"
)
Scatter Plot#
Mapping fields to both the x and y channels creates a scatter plot.
import altair as alt
from vega_datasets import data
source = data.cars()
alt.Chart(source).mark_point().encode(
x="Horsepower:Q",
y="Miles_per_Gallon:Q",
)
By default, point marks only have borders and are transparent inside. You can create a filled point by setting filled to True.
import altair as alt
from vega_datasets import data
source = data.cars()
alt.Chart(source).mark_point(filled=True).encode(
x="Horsepower:Q",
y="Miles_per_Gallon:Q",
)
Bubble Plot#
By mapping a third field to the size channel in the scatter plot, we can create a bubble plot instead.
import altair as alt
from vega_datasets import data
source = data.cars()
alt.Chart(source).mark_point().encode(
x="Horsepower:Q",
y="Miles_per_Gallon:Q",
size="Acceleration:Q",
)
Scatter Plot with Color and/or Shape#
Fields can also be encoded in the scatter plot using the color or shape channels. For example, this specification encodes the field Origin with both color and shape.
import altair as alt
from vega_datasets import data
source = data.cars()
alt.Chart(source).mark_point().encode(
alt.X("Miles_per_Gallon:Q").scale(zero=False),
alt.Y("Horsepower:Q").scale(zero=False),
color="Origin:N",
shape="Origin:N",
)
Dot Plot with Jittering#
To jitter points on a discrete scale, you can add a random offset:
import altair as alt
from vega_datasets import data
source = data.cars()
alt.Chart(source).mark_point().encode(
x="Horsepower:Q",
y="Cylinders:O",
yOffset="random:Q",
).transform_calculate(
random="random()"
).properties(
height=alt.Step(50)
)
Wind Vector Example#
We can also use point mark with wedge as shape and angle encoding to create a wind vector map. Other shape options are:
"circle", "square", "cross", "diamond", "triangle-up", "triangle-down", "triangle-right", "triangle-left", "stroke", "arrow", and "triangle".
import altair as alt
from vega_datasets import data
source = data.windvectors()
alt.Chart(source).mark_point(shape="wedge", filled=True).encode(
latitude="latitude",
longitude="longitude",
color=alt.Color("dir").scale(domain=[0, 360], scheme="rainbow").legend(None),
angle=alt.Angle("dir").scale(domain=[0, 360], range=[180, 540]),
size=alt.Size("speed").scale(rangeMax=500),
).project("equalEarth")
Geo Point#
By mapping geographic coordinate data to longitude and latitude channels of a corresponding projection, we can visualize geographic points. The example below shows major airports in the US.
import altair as alt
from vega_datasets import data
airports = data.airports()
states = alt.topo_feature(data.us_10m.url, feature="states")
# US states background
background = alt.Chart(states).mark_geoshape(
fill="lightgray",
stroke="white"
).properties(
width=500,
height=300,
).project("albersUsa")
# airport positions on background
points = alt.Chart(airports).mark_circle(
size=10,
color="steelblue",
).encode(
longitude="longitude:Q",
latitude="latitude:Q",
tooltip=["name", "city", "state"],
)
background + points