Marks

We saw in Encodings that the encode() method is used to map columns to visual attributes of the plot. The mark property is what specifies how exactly those attributes should be represented on the plot.

Altair provides a number of basic mark properties:

Mark Name

Method

Description

Example

area

mark_area()

A filled area plot.

Simple Stacked Area Chart

bar

mark_bar()

A bar plot.

Simple Bar Chart

circle

mark_circle()

A scatter plot with filled circles.

One Dot Per Zipcode

geoshape

mark_geoshape()

A geographic shape

Choropleth Map

image

mark_image()

A scatter plot with image markers.

Image Mark

line

mark_line()

A line plot.

Simple Line Chart

point

mark_point()

A scatter plot with configurable point shapes.

Multi-panel Scatter Plot with Linked Brushing

rect

mark_rect()

A filled rectangle, used for heatmaps

Simple Heatmap

rule

mark_rule()

A vertical or horizontal line spanning the axis.

Candlestick Chart

square

mark_square()

A scatter plot with filled squares.

N/A

text

mark_text()

A scatter plot with points represented by text.

Bar Chart with Labels

tick

mark_tick()

A vertical or horizontal tick mark.

Simple Strip Plot

In addition, Altair provides the following compound marks:

Mark Name

Method

Description

Example

box plot

mark_boxplot()

A box plot.

Box Plot with Min/Max Whiskers

error band

mark_errorband()

A continuous band around a line.

Line Chart with Confidence Interval Band

error bar

mark_errorbar()

An errorbar around a point.

Error Bars showing Confidence Interval

In Altair, marks can be most conveniently specified by the mark_* methods of the Chart object, which take optional keyword arguments that are passed to MarkDef to configure the look of the marks.

For example, the following uses mark_circle() with additional arguments to represent points as red semi-transparent filled circles:

import altair as alt
from vega_datasets import data

url = data.cars.url

alt.Chart(url).mark_circle(
    color='red',
    opacity=0.3
).encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q'
)

Image Mark

The image mark, unlike other simple marks, requires the mark to include a url encoding, which specifies the PNG to use for the image:

import altair as alt
import pandas as pd

source = pd.DataFrame.from_records([
      {"x": 0.5, "y": 0.5, "img": "https://vega.github.io/vega-datasets/data/ffox.png"},
      {"x": 1.5, "y": 1.5, "img": "https://vega.github.io/vega-datasets/data/gimp.png"},
      {"x": 2.5, "y": 2.5, "img": "https://vega.github.io/vega-datasets/data/7zip.png"}
])

alt.Chart(source).mark_image(
    width=50,
    height=50
).encode(
    x='x',
    y='y',
    url='img'
)

Compound Marks

BoxPlot

The compound mark mark_boxplot() can be used to create a boxplot without having to specify each part of the plot (box, whiskers, outliers) separately.

import altair as alt
from vega_datasets import data

source = data.population.url

alt.Chart(source).mark_boxplot().encode(
    y='people:Q'
).properties(
    width=200,
    height=300
)

To create a side-by-side boxplot, simply encode the group column on the other axis.

import altair as alt
from vega_datasets import data

source = data.population.url

alt.Chart(source).mark_boxplot().encode(
    x='age:O',
    y='people:Q'
)

Note that the default behavior is to display outliers as points, where an outlier is defined as any point more than 1.5 IQRs from the box. Users can adjust this threshold using the extent property of the mark.

import altair as alt
from vega_datasets import data

source = data.population.url

alt.Chart(source).mark_boxplot(extent=3.0).encode(
    x='age:O',
    y='people:Q'
)

The outliers can be ignored completely using extent='max-min'

import altair as alt
from vega_datasets import data

source = data.population.url

alt.Chart(source).mark_boxplot(extent='min-max').encode(
    x='age:O',
    y='people:Q'
)

Mark Properties

As seen in the last two examples, additional arguments to mark_*() methods are passed along to an associated MarkDef instance, which supports the following attributes:

Property

Type

Description

align

Align

The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of "left", "right", "center".

angle

number

The rotation angle of the text, in degrees.

aspect

boolean

Whether to keep aspect ratio of image marks.

baseline

TextBaseline

The vertical text baseline. One of "alphabetic" (default), "top", "middle", "bottom", "line-top", or "line-bottom". The "line-top" and "line-bottom" values operate similarly to "top" and "bottom", but are calculated relative to the lineHeight rather than fontSize alone.

binSpacing

number

Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).

Default value: 1

blend

Blend

The color blend mode for drawing an item on its current background. Any valid CSS mix-blend-mode value can be used.

__Default value: "source-over"

clip

boolean

Whether a mark be clipped to the enclosing group’s width and height.

color

anyOf(Color, Gradient)

Default color.

Default value: "#4682b4"

Note:

  • This property cannot be used in a style config.

  • The fill and stroke properties have higher precedence than color and will override color.

cornerRadius

number

The radius in pixels of rounded rectangle corners.

Default value: 0

cornerRadiusBottomLeft

number

The radius in pixels of rounded rectangle bottom left corner.

Default value: 0

cornerRadiusBottomRight

number

The radius in pixels of rounded rectangle bottom right corner.

Default value: 0

cornerRadiusEnd

number

  • For vertical bars, top-left and top-right corner radius.

  • For horizontal bars, top-right and bottom-right corner radius.

cornerRadiusTopLeft

number

The radius in pixels of rounded rectangle top right corner.

Default value: 0

cornerRadiusTopRight

number

The radius in pixels of rounded rectangle top left corner.

Default value: 0

cursor

Cursor

The mouse cursor used over the mark. Any valid CSS cursor type can be used.

dir

TextDirection

The direction of the text. One of "ltr" (left-to-right) or "rtl" (right-to-left). This property determines on which side is truncated in response to the limit parameter.

Default value: "ltr"

dx

number

The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the angle property.

dy

number

The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the angle property.

ellipsis

string

The ellipsis string for text truncated in response to the limit parameter.

Default value: "…"

fill

anyOf(Color, Gradient, null)

Default Fill Color. This property has higher precedence than config.color.

Default value: (None)

fillOpacity

number

The fill opacity (value between [0,1]).

Default value: 1

filled

boolean

Whether the mark’s color should be used as fill color instead of stroke color.

Default value: false for all point, line, and rule marks as well as geoshape marks for graticule data sources; otherwise, true.

Note: This property cannot be used in a style config.

font

string

The typeface to set the text in (e.g., "Helvetica Neue").

fontSize

number

The font size, in pixels.

Default value: 11

fontStyle

FontStyle

The font style (e.g., "italic").

fontWeight

FontWeight

The font weight. This can be either a string (e.g "bold", "normal") or a number (100, 200, 300, …, 900 where "normal" = 400 and "bold" = 700).

height

number

Height of the marks.

href

string

A URL to load upon mouse click. If defined, the mark acts as a hyperlink.

interpolate

Interpolate

The line interpolation method to use for line and area marks. One of the following:

  • "linear": piecewise linear segments, as in a polyline.

  • "linear-closed": close the linear segments to form a polygon.

  • "step": alternate between horizontal and vertical segments, as in a step function.

  • "step-before": alternate between vertical and horizontal segments, as in a step function.

  • "step-after": alternate between horizontal and vertical segments, as in a step function.

  • "basis": a B-spline, with control point duplication on the ends.

  • "basis-open": an open B-spline; may not intersect the start or end.

  • "basis-closed": a closed B-spline, as in a loop.

  • "cardinal": a Cardinal spline, with control point duplication on the ends.

  • "cardinal-open": an open Cardinal spline; may not intersect the start or end, but will intersect other control points.

  • "cardinal-closed": a closed Cardinal spline, as in a loop.

  • "bundle": equivalent to basis, except the tension parameter is used to straighten the spline.

  • "monotone": cubic interpolation that preserves monotonicity in y.

invalid

[‘filter’, None]

Defines how Vega-Lite should handle marks for invalid values (null and NaN).

  • If set to "filter" (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).

  • If null, all data items are included. In this case, invalid values will be interpreted as zeroes.

limit

number

The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.

Default value: 0 – indicating no limit

line

anyOf(boolean, OverlayMarkDef)

A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.

  • If this value is an empty object ({}) or true, lines with default properties will be used.

  • If this value is false, no lines would be automatically added to area marks.

Default value: false.

lineBreak

string

A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.

lineHeight

number

The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.

opacity

number

The overall opacity (value between [0,1]).

Default value: 0.7 for non-aggregate plots with point, tick, circle, or square marks or layered bar charts and 1 otherwise.

order

[null, boolean]

For line and trail marks, this order property can be set to null or false to make the lines use the original order in the data sources.

orient

Orientation

The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.

  • For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.

  • For area, this property determines the orient property of the Vega output.

  • For line and trail marks, this property determines the sort order of the points in the line if config.sortLineBy is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored.

point

anyOf(boolean, OverlayMarkDef, [‘transparent’])

A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.

  • If this property is "transparent", transparent points will be used (for enhancing tooltips and selections).

  • If this property is an empty object ({}) or true, filled points with default properties will be used.

  • If this property is false, no points would be automatically added to line or area marks.

Default value: false.

radius

number

Polar coordinate radial offset, in pixels, of the text label from the origin determined by the x and y properties.

shape

anyOf(SymbolShape, string)

Shape of the point marks. Supported values include:

  • plotting shapes: "circle", "square", "cross", "diamond", "triangle-up", "triangle-down", "triangle-right", or "triangle-left".

  • the line symbol "stroke"

  • centered directional shapes "arrow", "wedge", or "triangle"

  • a custom SVG path string (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)

Default value: "circle"

size

number

Default size for marks.

  • For point/circle/square, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.

  • For bar, this represents the band size of the bar, in pixels.

  • For text, this represents the font size, in pixels.

Default value:

  • 30 for point, circle, square marks; width/height’s step

  • 2 for bar marks with discrete dimensions;

  • 5 for bar marks with continuous dimensions;

  • 11 for text marks.

stroke

anyOf(Color, Gradient, null)

Default Stroke Color. This property has higher precedence than config.color.

Default value: (None)

strokeCap

string

The stroke cap for line ending style. One of "butt", "round", or "square".

Default value: "butt"

strokeDash

array(number)

An array of alternating stroke, space lengths for creating dashed or dotted lines.

strokeDashOffset

number

The offset (in pixels) into which to begin drawing with the stroke dash array.

strokeJoin

string

The stroke line join method. One of "miter", "round" or "bevel".

Default value: "miter"

strokeMiterLimit

number

The miter limit at which to bevel a line join.

strokeOffset

number

The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.

strokeOpacity

number

The stroke opacity (value between [0,1]).

Default value: 1

strokeWidth

number

The stroke width, in pixels.

style

anyOf(string, array(string))

A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the style configuration. If style is an array, later styles will override earlier styles. Any mark properties explicitly defined within the encoding will override a style default.

Default value: The mark’s name. For example, a bar mark will have style "bar" by default. Note: Any specified style will augment the default style. For example, a bar mark with "style": "foo" will receive from config.style.bar and config.style.foo (the specified style "foo" has higher precedence).

tension

number

Depending on the interpolation type, sets the tension parameter (for line and area marks).

text

Text

Placeholder text if the text channel is not specified

theta

number

Polar coordinate angle, in radians, of the text label from the origin determined by the x and y properties. Values for theta follow the same convention of arc mark startAngle and endAngle properties: angles are measured in radians, with 0 indicating “north”.

thickness

number

Thickness of the tick mark.

Default value: 1

timeUnitBand

number

Default relative band size for a time unit. If set to 1, the bandwidth of the marks will be equal to the time unit band step. If set to 0.5, bandwidth of the marks will be half of the time unit band step.

timeUnitBandPosition

number

Default relative band position for a time unit. If set to 0, the marks will be positioned at the beginning of the time unit band step. If set to 0.5, the marks will be positioned in the middle of the time unit band step.

tooltip

anyOf(number, string, boolean, TooltipContent, null)

The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.

  • If tooltip is true or {"content": "encoding"}, then all fields from encoding will be used.

  • If tooltip is {"content": "data"}, then all fields that appear in the highlighted data point will be used.

  • If set to null or false, then no tooltip will be used.

See the tooltip documentation for a detailed discussion about tooltip in Vega-Lite.

Default value: null

type

Mark

The mark type. This could a primitive mark type (one of "bar", "circle", "square", "tick", "line", "area", "point", "geoshape", "rule", and "text") or a composite mark type ("boxplot", "errorband", "errorbar").

width

number

Width of the marks.

x

anyOf(number, [‘width’])

X coordinates of the marks, or width of horizontal "bar" and "area" without specified x2 or width.

The value of this channel can be a number or a string "width" for the width of the plot.

x2

anyOf(number, [‘width’])

X2 coordinates for ranged "area", "bar", "rect", and "rule".

The value of this channel can be a number or a string "width" for the width of the plot.

x2Offset

number

Offset for x2-position.

xOffset

number

Offset for x-position.

y

anyOf(number, [‘height’])

Y coordinates of the marks, or height of vertical "bar" and "area" without specified y2 or height.

The value of this channel can be a number or a string "height" for the height of the plot.

y2

anyOf(number, [‘height’])

Y2 coordinates for ranged "area", "bar", "rect", and "rule".

The value of this channel can be a number or a string "height" for the height of the plot.

y2Offset

number

Offset for y2-position.

yOffset

number

Offset for y-position.

Marks can also be configured globally using chart-level configurations; see Mark and Mark Style Configuration for details.