Annotate a line chart: comments attached to points
Explain a peak or a dip right on the line with Line Plume: “Annotate” button, “x | series | text” list or DAX measure, annotations that follow the filters.
Lire en françaisA peak in November, a dip in April: on a line chart, readers see the event but not its explanation. In Power BI, you then drop a text box on top of the chart… which lands next to the point as soon as someone filters a year or resizes the visual. Line Plume attaches each annotation to a point of the line (an x value and a series): the bubble follows the line when the data changes and disappears when the point is no longer shown. This tutorial annotates the monthly sales of a home store (fictitious data).
What you need
- A recent version of Power BI Desktop.
- The Line Plume visual, installed from the
.pbivizfile in your "Downloads" area: Visualizations pane › … › Import a visual from a file. - A date (or month) column and a measure.
The PlumeLineChart-Sample-EN sample report, in the same area, shows these charts ("2 · Annotations ★" page).
1. Prepare the data
The Sales table has one row per order, with a Month column (first day of the month, mmm yyyy format) and a Channel column (Store, Web, Phone). For annotations that come from the data, add a small Events table (Home › Enter data): a Month column (date) and a Text column, with no relationship.
Revenue = SUM ( Sales[Amount] )
Event =
VAR m = MAX ( Sales[Month] )
RETURN
CONCATENATEX ( FILTER ( Events, Events[Month] = m ), Events[Text], " · " )
Event returns a text for the months listed in the table and nothing elsewhere: each non-blank value becomes an annotation.
2. Drop the fields
| Visual well | Field |
|---|---|
| X axis | Month (the field itself, not its date hierarchy) |
| Legend (series) | Channel (optional) |
| Y axis values | Revenue |
| Annotations (text) | Event (optional) |
Dates are spaced by their real gap. On hover, a vertical guide shows every channel for the month in one tooltip. Set X axis › Date format (for example MMM yyyy) and Lines › Shape (Straight, Smooth or Step).
3. Three ways to annotate
With the "Annotate" button (the fastest). In edit mode, hover the chart: an Annotate button appears. Click it, then a point of the line, type the text and press Enter (Esc cancels). The visual writes the line into the Format pane list by itself. Then:
- drag a bubble to move it (the position is saved);
- double-click it to edit the text;
- click × to delete it.
With the keyboard: Tab to the chart, Annotate (Enter), ← → for the date, ↑ ↓ for the line, Enter to type the text.
With the list. In Annotations ★ › Annotations (one per line), one line per annotation, as x | text or x | series | text:
# Lines starting with # are comments
2023-11 | Web | Black Friday: Web record
2023-12 | Store | Christmas in store
2025-03-15 | Mid-March
- x: a date (
2024-06-01,2024-06,2024,06/15/2024in US English), a number or a category as displayed. A date missing from the data goes to the nearest point, as long as it stays within the axis range. - series: optional, the name as shown in the legend (case and accents ignored). Without a series: the first line that has a value at x.
- text: up to 4 lines, wrapped automatically. A vertical bar inside the text is written
\|.
With a measure. The Event measure in Annotations (text) creates one annotation per non-blank value. These annotations can be dragged, but are edited in the Events table.
A line that cannot be placed (unknown series, unreadable date) is reported at the bottom of the chart, in edit mode only: "Annotation ignored (series or x not found)". A month that is simply filtered out is not an error: the annotation comes back with its point.
4. Tune how annotations look
- Annotations ★ › Displayed content: Text, Text and value or Text, x and value.
- Style: Bubble, Filled label or Text only; Color (empty = series color), Text size, Maximum width (px).
- Marker on the point, Connector (Line or None) and its Line style.
- Default position: Automatic (no overlap) avoids lines, labels and axes; Distance from the point (px) moves bubbles further away.
- To publish a report without the button, turn off "Annotate" button (edit mode): annotations stay visible.
5. Premium features ★
| Feature | Where to set it |
|---|---|
| Annotations (button, list, measure) | Annotations ★ card and Annotations (text) well |
| Name and last value at the end of each line | End-of-line labels ★ |
| One or more series in color, the others in gray | Data colors › Coloring: Highlight series ★ |
| Gradient area | Lines › Fill under the line: Gradient ★ |
| Reference lines, trend | Analytics pane › Reference lines ★, Trend ★ |
No feature is ever blocked. Without a key, annotations display normally with a light "Plume Visuals · Premium preview" watermark and an "Unlock →" link. Paste a license key (format PLUM1.…, valid for one year) in Plume Studio License › License key, the first card of the Format pane, to remove it. Line Plume alone: €39 (Personal), €99 (Small business) or €299 (Enterprise), or the Full catalog bundle: see pricing.
6. Dynamic formats
Any setting can come from a DAX measure (see the tutorial). Example: build the whole annotation list, series included, from a Notes table (columns Month, Channel, Text):
Notes list =
CONCATENATEX ( Notes, FORMAT ( Notes[Month], "yyyy-MM" ) & " | " & Notes[Channel] & " | " & Notes[Text], UNICHAR ( 10 ) )
Drop the measure into Dynamic format, then right-click › Rename for this visual: annotations.list. It wins over the Format pane list: add annotations in the table, not with the button.
Common pitfalls
- The same annotation on every line: with a Legend (series), the annotation measure is evaluated for each series. Limit it to one series, for example
IF ( SELECTEDVALUE ( Sales[Channel] ) = "Web", [Event] ). - Nothing shows: Annotations ★ › Show is off, or x is outside the axis range (year filter).
- Dates read the wrong way:
03/04/2025follows the day / month order of the number locale; the2025-04-03format is always understood. - A value starts with #: write
\#, otherwise the line is a comment. - Only one measure in Y axis values with a legend: remove the legend to draw several measures or use Secondary Y axis values.
Another question? Go to support.
Summary
- One annotation = one point (x, series): it follows the line and the filters.
- Annotate button to go fast,
x | series | textlist to review everything, text measure for events coming from the data. - Visual page and live demo: Line Plume.