Aller au contenu
Plume Visuals
← Retour
Gamme de base

Bump chart pour Power BI Bump Plume

Qui monte, qui descend, qui entre dans le top : l'évolution des classements, calculée dans le visuel, en courbes, en rubans ou en plan de métro.

Tutoriels ↓

Démo interactive

Le vrai visuel Power BI, exécuté dans votre navigateur avec les données fictives du rapport d'exemple. Changez de scénario, de style ou d'année : le visuel se met à jour comme dans Power BI. Fonctions premium ★ montrées ici sans filigrane ; dans Power BI, sans licence, elles affichent « Plume Visuals · Aperçu premium ».

Bump Plume montre comment un classement change d'une période à l'autre. Glissez les périodes dans Axe, ce que vous classez dans Légende et n'importe quelle mesure dans Valeur : le visuel calcule les rangs à chaque période, sans RANKX, avec la méthode d'ex aequo de votre choix ; un rang déjà calculé peut aller dans le champ Rang. Deux ex aequo ne se recouvrent jamais. Le Top N garde une rangée « Hors top » où l'on voit qui sort et qui revient. Les lignes se dessinent période par période. Trois dessins gratuits (courbes en S, cassures nettes, rubans empilés comme le graphique en rubans de Power BI). En premium : le bouton ▶ ou la barre de lecture qui rejoue la course, les noms suivant la tête des lignes, les paliers, les ex aequo modifié et unique, plan de métro, rubans proportionnels aux valeurs, bascule Rangs / Valeurs pour le lecteur, variation ▲3 / ▼2, zones podium et relégation, logos aux deux bouts et annotations.

Cas d'usage

  • Classement des marques, des produits ou des magasins par chiffre d'affaires, année après année
  • Championnats et compétitions : journées, ex aequo, podium et relégation
  • Parts de marché par trimestre : qui entre dans le Top 5, qui en sort
  • Délais, coûts ou temps où le plus petit est le meilleur (rang 1 = plus petite valeur)

GratuitInclus gratuitement

  • Champs Axe, Légende, Valeur (classée par le visuel) ou Rang déjà calculé ; jusqu'à 200 entités
  • Ex aequo standard 1-2-2-4 (RANKX) ou dense, « =2 » ; deux ex aequo jamais l'un sur l'autre
  • Top N à chaque période ou sur la dernière, avec rangée « Hors top » et entrées ▲ / sorties ▼
  • Courbes en S (courbure réglable), cassures nettes, rubans empilés comme le graphique en rubans natif
  • Noms aux deux bouts, rang dans les marqueurs, valeurs sur les points, axes des périodes et des rangs, rangées alternées
  • Lignes dessinées période par période à l'arrivée des données, transitions animées après un filtre
  • Survol qui met une entité au premier plan, filtrage croisé, surbrillance, infobulles avec variation et meilleur rang, clavier
  • Étiquettes de données, total au-dessus des rubans empilés, style de trait, titres des axes, quadrillage, exploration de l'axe des périodes
  • Classement gardé sous un filtre (estomper ou masquer les autres, rangs conservés), noms longs sur deux lignes
  • Formats dynamiques : bouton fx sur les couleurs et les textes, tout réglage piloté en DAX

PremiumFonctions premium

  • Lecture « course » : bouton ▶ ou barre de lecture (lecteur commun Plume), noms qui suivent la tête des lignes
  • Plan de métro : traits épais, diagonales à 45°, stations et correspondances quand deux entités échangent leurs places ; dessin en paliers
  • Ex aequo modifié 1-3-3-4 ou unique 1-2-3-4, Top N sur au moins une période
  • Rubans proportionnels aux valeurs, centrés sur le rang : rangs et montants dans un même dessin
  • Bouton Rangs / Valeurs pour le lecteur, avec des lignes qui glissent jusqu'à leur valeur
  • Variation de rang ▲3 / ▼2, zones de classement (podium, relégation), logos aux deux bouts, annotations
  • Mise en avant d'entités, dégradé selon le rang final ; styles communs au catalogue, palettes, thème JSON

Utilisables sans clé pour les essayer, avec un filigrane.

Tutoriels

Commencez par la prise en main, puis piochez dans les cas pratiques. La page « Champs et réglages » décrit chaque option du volet Format.

  1. Prise en mainDébutant6 min de lectureUn bump chart dans Power BI : l'évolution des classements, sans RANKXPrise en main de Bump Plume : préparer une table, insérer le visuel, laisser le visuel calculer les rangs, régler le Top N, lire les entrées et sorties et rejouer l'évolution.
  2. Cas pratiquesIntermédiaire6 min de lectureBump Plume : 9 cas pratiques de classementsPas à pas : ex aequo comme RANKX, plus petite valeur en tête, Top N avec entrées et sorties, rang déjà calculé, rubans, plan de métro, lecture ★, zones et logos.
  3. Champs et réglagesIntermédiaire21 min de lectureBump Plume : tous les champs et réglages expliquésChaque zone de champ et chaque réglage du volet Format de Bump Plume : classement, dessins, marqueurs, étiquettes, axes, zones, vues, lecture, avec leurs valeurs par défaut.
  4. Bases communesBien démarrer avec les visuels PlumeInstallation, licence, styles et réglages communs à tous les visuels.

Champs à glisser dans le visuel

ChampContenu
Axe (temps)Date, année, mois ou catégorie triée : les périodes, de gauche à droiteObligatoire
Légende (entité)Ce qui est classé : une ligne par valeur (200 au plus)Obligatoire
Valeur (classée par le visuel)Une mesure classée par le visuel à chaque période ; épaisseur des rubansFacultatif
Rang (facultatif)Un rang déjà calculé (1 = premier), à la place de la ValeurFacultatif
ImageLogo intégré (data:image/…;base64) aux deux bouts des lignesFacultatifPremium
AnnotationsMesure texte : une note sur le point de l'entité à cette périodeFacultatifPremium
InfobullesMesures supplémentairesFacultatif
Format dynamiqueMesures renommées carte.réglage (ex. title.text) : le volet Format piloté en DAXFacultatif

Il vous manque une fonction ? Nous adaptons nos visuels ou en créons sur mesure. Demander un visuel sur mesure

Un bug dans Bump Plume, ou une idée pour l'améliorer ? Signaler un bug · Proposer une idée

Référence technique pour assistants IA

Section destinée aux assistants IA (ChatGPT, Claude, Copilot…) : tous les champs, toutes les options du volet Format avec leurs noms internes, le format des données et des exemples DAX. Générée depuis le code du visuel, version 1.1.0.0. Vous pouvez la copier dans votre assistant pour qu'il vous guide.

Version Markdown brute (/ai/visuals/bump-chart.md)
# Bump Plume: technical reference for AI assistants

> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.1.0.0**. This page is generated from the visual's source code at each site build: field names, option names and defaults are exact for this version.

Use it to help someone build a report with Bump Plume: which fields to drag, how to shape the data, which Format pane option to change, or how to write the visual's settings in a PBIP `visual.json` file.

- Product page: https://plumevisuals.com/en/visuals/bump-chart (French: https://plumevisuals.com/fr/visuels/bump-chart)
- Summary: Who climbs, who falls, who enters the top: rankings over time, computed in the visual, as curves, ribbons or a metro map.
- Power BI visual GUID (`visualType`): `plumeBumpChart65AF1CF0250B4188882D035A1EA77D58`
- Power BI visuals API: 5.11.1
- Support: https://plumevisuals.com/support · contact@plumevisuals.com
- Index of everything on the site for AI assistants: https://plumevisuals.com/llms.txt

## What the visual does

Bump Plume (identifier `bump-chart`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; AppSource submission in preparation) that draws **bump charts**: how rankings change over time. Power BI has no native bump chart; its closest visual is the ribbon chart (no rank axis, no names on the ribbons).

**New in version 1.1.0.0 (30/10/2026):** Format pane reorganized (end labels in **End labels**, `labels.v*` → `labels.*`, gridlines in **Gridlines**); free full data labels with totals above columns, axis titles, gridlines, drill-down, highlight color, "keep ranks under filters", two-line long names in the metro map, annotations like Line Plume.

- **Ranks computed in the visual**: put a measure in `value` ("Value (ranked by the visual)"); in each period the entities are ranked by it (`ranking.order` = `desc`: highest value first, `asc`: lowest first). No `RANKX` needed. A rank you already compute goes in `rank` ("Rank (optional)") and wins over the value.
- **Ties** (`ranking.ties`): `competition` 1-2-2-4 (= RANKX Skip, default), `dense` 1-2-2-3 (= RANKX Dense), premium `modified` ★ 1-3-3-4 and `ordinal` ★ 1-2-3-4 (ties broken by the previous rank, then by name; premium only when the visual ranks the Value field). Tied entities are never drawn on top of each other: each gets its own row ("slot"), ordered by previous rank then name; labels write "=2" (`ranking.tieMark`), tooltips "(tied)".
- **Top N** (`ranking.topN`, 10 by default, 0 = all) with `ranking.topBasis`: `period` (the first N of each period; an entity that leaves drops with dashes into an "Outside the top N" row with an exit marker ▼ and comes back with an entry marker ▲), `last` (the first N of the last period, followed over all periods), `any` ★ (entities in the top N at least once).
- **Rank 1 at the top** (`ranking.rankOneTop`, on). A period without a value breaks the line (`ranking.missing` = `gap`) or is skipped (`connect`); 0 is ranked.
- **Designs** (`design.type`): `curve` S-curves (default, `design.curvature` 0–100), `straight` sharp breaks, `stacked` stacked ribbons like the Power BI ribbon chart (spacing, transparency 30, border), and premium `step` (steps), `metro` (metro map: thick lines, horizontal runs and 45° bends, stations, interchange capsules where two entities swap places, terminus badges) and `ribbon` (ribbons as thick as their value, centered on the rank).
- Markers with the rank number inside, names at the start and the end of the lines, values on points, hover to bring an entity forward (others fade), lines drawn period by period when data changes, and premium playback: a discreet ▶ button or a play bar that reveals periods one by one with labels following the head of the lines.

## Free vs premium (★)

- Every feature works without a key and nothing is ever blocked. Free features never show a watermark.
- Shared Style card (the same in every Plume visual): the styles `none`, `minimal` and `blackWhite`, the two Plume gradient palettes (`crest`, `crestDiverging`), "Follow report theme" and all custom colors are **free**; every other `style.preset`, the other gradient palettes (`style.palette`) and `style.themeJson` ("Theme JSON ★") are **premium**.
- Free in Bump Plume: ranks from Value or Rank, standard and dense ties (like RANKX), Top N per period or on the last period with entries and exits, curves, sharp breaks, stacked ribbons, markers, names at both ends, values on points, axes, banded rows, the ranks view, drawing animation when data changes, palette or single colors, tooltips, legend, keyboard.
- Premium features of Bump Plume:
  - `design.type` = `step`, `metro` or `ribbon`;
  - `ranking.ties` = `modified` or `ordinal` (when the visual ranks the Value field) and `ranking.topBasis` = `any` (Top N ≠ 0);
  - playback: `play.controls` (play bar), `play.button` (discreet ▶ button) or `play.autoPlay`, on an interactive visual with at least two periods (since the 22/10/2026 rebalancing; the ▶ button is off by default);
  - `dataColors.mode` = `highlight` (named entities in color, others gray; `dataColors.highlightNames` separated by `;`, empty = the leader at the end) or `finalRank` (gradient by final rank);
  - `endLabels.change` (rank change ▲3 / ▼2 at the end of the lines);
  - `view.mode` = `value` (values view), also when a reader picks "Values" with the `view.toggle` button;
  - `zones.show` (ranking zones: podium, relegation);
  - the `image` role (logos) when images are shown, and annotations (`notes` role or `annotations.list`) when shown.
- Without a valid key, a premium feature in use shows, in edit mode, a "Premium preview" note in the footer; in reading view, **"Plume Visuals · Premium preview"** (French « Plume Visuals · Aperçu premium ») is repeated lightly across the whole visual, without catching the mouse. It disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`), the **first card** of the Format pane. Premium options and list values have " ★" appended to their label.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `bump-chart` or the whole catalog. In edit mode, a wrong key shows "Invalid license key", "License expired (date)" or "This key does not cover this visual".
- Licenses last one year (one-time payment, no automatic renewal). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack.

## Expected data shape

One row per period and per entity, with a measure.

| Axis (`axis`) | Legend (`legend`) | Value (`value`) |
|---|---|---|
| 2023 | Alpha | 400,000 |
| 2023 | Bravo | 300,000 |
| 2024 | Alpha | 300,000 |
| 2024 | Bravo | 350,000 |

- **Axis (time)** (`axis`, « Axe (temps) », one column, required): a date, year, month, number or sorted category. Dates and numbers are sorted by the visual; text keeps Power BI's sort order.
- **Legend (entity)** (`legend`, « Légende (entité) », one column, required): one line per value, up to 200.
- **Value (ranked by the visual)** (`value`, « Valeur (classée par le visuel) », one measure): required unless Rank is used. Also sets ribbon thickness.
- **Rank (optional)** (`rank`, « Rang (facultatif) », one measure): 1 = first; decimals allowed.
- **Image ★** (`image`, text measure): embedded images only: `data:image/png|jpeg|gif|webp|bmp|svg+xml;base64,…`, raw base64 or SVG text (SVG is sanitized); web addresses are ignored (no network). The last non-blank image of each entity is used.
- **Annotations ★** (`notes`, text measure): a note pinned to the entity's point in that period.
- **Tooltips** (`tooltips`) and **Dynamic format** (`format`).
- Volume: categories (periods) in windows of 30,000, more fetched with `fetchMoreData`; 100,004 rows (4 entities × 25,001 days) render in under 2.5 s; markers hide automatically when there is no room.

## DAX recipes

```dax
// One row per period and entity: a simple sum
Total revenue = SUM ( Sales[Revenue] )

// Rank 1 = fastest: keep the measure as is and set ranking.order = asc
Average lead time = AVERAGE ( Deliveries[Lead time] )

// Logo ★ from a column holding base64 text
Logo = "data:image/png;base64," & SELECTEDVALUE ( Brands[Logo base64] )

// Dynamic title (renamed title.text in the Dynamic format well)
Ranking title =
VAR y = CALCULATE ( MAX ( Sales[Year] ), ALLSELECTED () )
VAR t = CALCULATETABLE ( TOPN ( 1, VALUES ( Sales[Brand] ), CALCULATE ( SUM ( Sales[Revenue] ) ), DESC ), ALLSELECTED (), Sales[Year] = y )
RETURN "Brand ranking: " & CONCATENATEX ( t, Sales[Brand], ", " ) & " leads in " & y
```

## Interactions with the report

- Hover a line, marker or label: the entity comes in front (`interaction.front`), others fade (`interaction.dim`); tooltip with entity, period, rank (tied, outside the top), value, change since the previous period, best rank, annotation, Tooltips measures; report-page tooltips are supported.
- Click a line or a label: cross-filter on the entity; click a marker: entity × period; Ctrl for several; click an empty area: clear. Cross-highlighting from other visuals dims the other entities. Context menu everywhere.
- Keyboard: Tab to reach the chart, ↑ ↓ through entities in final-rank order (announced: "rank 3 in 2025, ▲2 since 2018, best rank 1"), Enter selects, Esc clears.
- Playback uses the shared Plume player (same settings as other Plume visuals): `play.controls` ★ (play bar with tick-marked slider, start / end, speed ×0.5–×4, keyboard; off by default), `play.button` ★ (discreet ▶ on hover when there is no bar, off by default), `play.autoPlay` ★, `play.speed` (ms per frame, 700), `play.loop`, `play.transition`, `play.follow` (labels follow the line heads), `play.showLabel` / `labelSize` (40) / `labelPosition` (current period while playing). `play.draw` (free) draws the lines period by period when data changes (`play.drawDuration`, 1400 ms); filters make points glide to their new place. "Reduce motion" is respected. Nothing is saved with persistProperties; the view chosen with the Ranks / Values button lasts for the session.

## Dynamic formats

- **fx button** (Power BI conditional formatting) on colors and texts of the Format pane, and on each entity color.
- **"Dynamic format" well** (`format`): measures renamed `card.setting` (e.g. `title.text`, `design.type`, `ranking.topN`) drive any setting and win over the fixed value. Driving a ★ setting by DAX still shows the watermark without a key.

## Format pane: option IDs

- Card order: `license`, `style`, `dataColors`, `ranking`, `design`, `markers`, `labels`, `xAxis`, `yAxis`, `zones`, `view`, `play`, `annotations`, `tooltip`, `legend`, `interaction`, then `title`, `source`, `container`, `texts`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `dataColors`, `ranking`, `view`, `design`, `markers`, `labels`, `endLabels`, `xAxis`, `yAxis`, `gridlines`, `legend`, `zones`, `annotations`, `play`, `interaction`, `tooltip`, `title`, `source`, `container`, `texts`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- `dataColors`: `mode` (`auto` | `single` | `highlight` ★ | `finalRank` ★), `single`, `fill` (per entity), `highlightNames`, `othersColor`.
- `ranking`: `order` (`desc` | `asc`), `ties` (`competition` | `dense` | `modified` ★ | `ordinal` ★), `tieMark`, `topN` (0–200, 10), `topBasis` (`period` | `last` | `any` ★), `missing` (`gap` | `connect`), `rankOneTop`.
- `design`: `type` (`curve` | `straight` | `step` ★ | `stacked` | `metro` ★ | `ribbon` ★), `curvature` (0–100, 50), `width` (0.5–20, 3), `casing`, `interchanges`, `ribbonSize` (10–100, 80), `spacing` (0–50, 12), `transparency` (0–90, 30), `border`.
- `markers`: `show` (`auto` | `all` | `ends` | `none`), `shape` (`circle` | `square` | `diamond`), `size` (4–48, 20), `rankInside`, `fill` (`solid` | `hollow`), `entryExit`.
- `endLabels`: `start`, `end`, `content` (`name` | `rankName` | `nameValue` | `rankNameValue`), `fontSize` (10), `color`, `bold`, `maxWidth` (8–45, 22), `images`, `change` ★, `changeBase` (`start` | `prev`), `upColor`, `downColor`.
- `labels` (values on the points): `show`, `position` (`below` | `above`), `units`, `decimals`, `prefix`, `suffix`.
- `xAxis`: `show`, `position` (`bottom` | `top` | `both`), `fontSize`, `color`, `dateFormat`, `gridlines.vShow`, `gridlines.vStyle`. `yAxis`: `show`, `position` (`left` | `right` | `both`), `fontSize`, `color`, `prefix`, `gridlines.hShow`, `gridlines.banding`, `outsideLabel`.
- `zones`: `show` ★, `topCount` (3), `topLabel`, `topColor`, `bottomCount` (0), `bottomLabel`, `bottomColor`, `opacity` (10). `view`: `mode` (`rank` | `value` ★), `toggle`, `zero`.
- `play`: `draw`, `drawDuration`, `speed`, `loop`, `autoPlay` ★, `transition`, `follow`, `controls` ★ (bool), `button` ★, `position` (`bottom` | `top`), `ticks` (`auto` | `all` | `none`), `tickLabels`, `stepButtons`, `speedButton`, `showLabel`, `labelSize`, `labelPosition`. `annotations`: `show`, `list` ★ (`entity | period | text` per line), `fontSize`, `color`. `tooltip`: `show`, `value`, `change`, `best`. `interaction`: `hover`, `dim` (25), `front`.

## Editing a PBIP report (visual.json)

`visualType` is the visual GUID `plumeBumpChart65AF1CF0250B4188882D035A1EA77D58`, `queryState` keys are the data role names (`axis`, `legend`, `value`, `rank`, `image`, `notes`, `tooltips`, `format`), `objects` keys are the option IDs. Booleans `true` / `false`, numbers suffixed with `D`, strings and enumeration values in single quotes, e.g. `"ranking": [ { "properties": { "topN": { "expr": { "Literal": { "Value": "5D" } } } } } ]`.

## Common pitfalls

- "Add what is ranked… in Legend (entity)": the Legend well is empty (one line per entity is required).
- Ranks differ from RANKX: tie method or direction (`ranking.ties`, `ranking.order`).
- Periods out of order: text axis sorted alphabetically ("R10" before "R2"); use a number or Sort by column.
- Entities missing: Top N (`ranking.topN`, 0 = all).
- "Ribbons: negative values count as zero": stacked ribbons cannot stack negatives.
- Image ignored: web address or unknown format; only embedded base64 images.
- Watermark visible: play bar, ▶ button or autoplay, steps, modified or unique ties, Top N on any period, metro, ribbons sized by value, highlight or final-rank colors, rank change, values view, zones, images, annotations, a ★ style or a theme JSON, without a valid key.

## Features that do NOT exist (do not suggest them)

Small multiples, reference lines and trend lines (Analytics pane), images loaded from web addresses, average ranks for ties (1, 2.5, 2.5, 4), ranking several measures without a Legend field, exporting the chart as an image, saving the reader's view in the report.

## Data fields (wells)

Internal name = data role name (PBIP `queryState` key). Labels as shown in Power BI (English / French). ★ = premium.

| Internal name | Label (EN) | Label (FR) | Kind | Max fields | Description |
|---|---|---|---|---|---|
| `axis` | Axis (time) | Axe (temps) | column | 4 | Periods in order: a date, a year, a month or any ordered category (rounds, seasons, waves). Several fields: drill down (year › quarter › month). |
| `legend` | Legend (entity) | Légende (entité) | column | 1 | What is ranked: products, teams, regions, brands… One line per value. |
| `value` | Value (ranked by the visual) | Valeur (classée par le visuel) | measure | 1 | The visual ranks the entities by this measure in each period (no RANKX needed). Also sets the ribbon thickness. |
| `rank` | Rank (optional) | Rang (facultatif) | measure | 1 | A rank you already compute (1 = first). Used instead of ranking the Value field. Computed with ALL(), it keeps the ranking under a filter. |
| `image` | Image ★ | Image ★ | measure | 1 | Text measure returning an embedded image (data:image/png;base64,…): logo or photo shown at both ends of the line. |
| `notes` | Annotations ★ | Annotations ★ | measure | 1 | Text measure: a note pinned to the point of the entity at that period where it is not empty. |
| `tooltips` | Tooltips | Infobulles | measure | several |  |
| `format` | Dynamic format | Format dynamique | measure | several | Measures named card.setting (e.g. title.fontSize): drive any Format option with DAX |

Data view: categorical, categories = `axis` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `value`, `rank`, `image`, `notes`, `tooltips`, `format`, grouped into series by `legend`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (205)

Columns: option ID (`object.property`), labels EN / FR as shown in Power BI, control type, PBIP literal type, default value, allowed values, notes.

### Plume Studio License / Licence Plume Studio (`license`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `license.buy` | Get a license | Obtenir une licence | info | text | `plumevisuals.com` |  |  |
| `license.key` | License key | Clé de licence | text | text | (empty) |  | Paste the key received after purchase on plumevisuals.com (starts with PLUM1.). Checked offline. |
| `license.showOwner` | Show license holder (edit mode) | Afficher le titulaire (mode édition) | toggle | bool | `true` | true / false |  |

### Style (`style`, Format pane)

**Style**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.preset` | Style | Style | dropdown | enumeration | `none` | `none` None; `minimal` Minimal; `blackWhite` Black & White; `press` Newspaper ★; `vintage` Vintage (antique plate) ★; `earth` Earth ★; `nordic` Nordic ★; `executive` Executive ★; `accessible` Accessible (high legibility) ★; `pastel` Pastel ★; `bauhaus` Bauhaus (pop) ★; `climate` Climate ★; `blueprint` Blueprint ★; `unknownPleasures` Unknown Pleasures ★; `dark` Graphite (dark) ★; `neon` Neon ★; `terminal` Terminal (Matrix) ★; `infographic` Infographic ★; `cockpit` Cockpit (HUD) ★; `hologram` Hologram ★ | Complete look shared by all Plume visuals: colors, three palettes, fonts, frame, table header, marks and effects. Customize colors below. |
| `style.themeJson` | Theme JSON ★ | Thème JSON ★ | textarea | text | (empty) |  | Paste a JSON theme: see the 'JSON themes' tutorial on plumevisuals.com |
| `style.followTheme` | Follow report theme | Suivre le thème du rapport | toggle | bool | `false` | true / false | Text, background, accent and data colors come from the Power BI report theme. |
| `style.reverse` | Reverse gradients | Inverser les dégradés | toggle | bool | `false` | true / false |  |

**Custom colors / Couleurs personnalisées**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.customColors` | Customize colors | Personnaliser les couleurs | toggle | bool | `false` | true / false | Start from the style and pick your own colors. A color left empty keeps the style's color. |
| `style.colorBackground` | Background | Fond | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorText` | Text | Texte | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorMuted` | Secondary text | Texte secondaire | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorGrid` | Lines and grid | Traits et grille | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorAccent` | Accent | Accent | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorPositive` | Favorable | Favorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorNegative` | Unfavorable | Défavorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series1` | Series 1 | Série 1 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series2` | Series 2 | Série 2 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series3` | Series 3 | Série 3 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series4` | Series 4 | Série 4 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series5` | Series 5 | Série 5 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series6` | Series 6 | Série 6 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series7` | Series 7 | Série 7 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series8` | Series 8 | Série 8 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.palette` | Gradient palette | Palette du dégradé | dropdown | enumeration | `auto` | `auto` Style or theme palette; `crest` Plume (sequential); `crestDiverging` Plume (diverging); `viridis` Viridis ★; `magma` Magma ★; `inferno` Inferno ★; `cividis` Cividis (colorblind-safe) ★; `warmingStripes` Warming stripes ★; `rdYlBu` Red–Yellow–Blue ★; `brBG` Brown–Teal (drought) ★; `spectral` Spectral ★; `blues` Blues ★; `reds` Reds ★; `grays` Grays ★; `press` Press (ink and paper) ★; `nordic` Nordic ★; `earth` Earth (ochre to umber) ★; `pastel` Pastel ★; `okabeIto` Okabe-Ito (colorblind-safe) ★ | Visible when `style.customColors` = `true`. Gradient from the catalog (Viridis, Magma…). The start, middle and end colors below replace it. |
| `style.scaleLow` | Gradient: start | Dégradé : début | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleMid` | Gradient: middle (diverging) | Dégradé : milieu (écarts) | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleHigh` | Gradient: end | Dégradé : fin | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |

**Text / Texte**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.fontFamily` | Font | Police | font | formatting | `Segoe UI, wf_segoe-ui_normal, helvetica, arial, sans-serif` |  | Used by every text of the visual (title, axes, labels, cells). |

**Animations**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.animate` | Animations | Animations | toggle | bool | `true` | true / false | Smooth transitions when data changes. Automatically disabled when the system asks to reduce motion. |

### Data colors / Couleurs des données (`dataColors`, Format pane)

Per-item card: Power BI shows it once per series, category, column or KPI (an "Apply settings to" list where relevant). In PBIP `visual.json`, each entry of `objects.dataColors` carries a `selector` (`metadata` = the field's queryRef, or `data` for a category value); an entry without a selector applies to all items.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `dataColors.mode` | Coloring | Coloration | dropdown | enumeration | `auto` | `auto` Palette (one color per entity); `single` Single color; `highlight` Highlight entities ★; `finalRank` Gradient by final rank ★ |  |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.highlightNames` | Highlighted entities (separated by ;, empty = first at the end) | Entités mises en avant (séparées par ;, vide = la 1re à la fin) | text | text | (empty) |  |  |
| `dataColors.highlightColor` | Highlight color (empty = entity color) | Couleur mise en avant (vide = celle de l'entité) | color | fill | (empty) | hex color |  |
| `dataColors.othersColor` | Other entities color (empty = style gray) | Couleur des autres entités (vide = gris du style) | color | fill | (empty) | hex color |  |

### Ranking / Classement (`ranking`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `ranking.order` | Rank 1 = | Rang 1 = | dropdown | enumeration | `desc` | `desc` Highest value; `asc` Lowest value | When the visual ranks the Value field. Lowest value: times, costs, golf scores, delays… |
| `ranking.ties` | Ties | Ex aequo | dropdown | enumeration | `competition` | `competition` Standard: 1, 2, 2, 4 (RANKX Skip); `dense` Dense: 1, 2, 2, 3 (RANKX Dense); `modified` Modified: 1, 3, 3, 4 ★; `ordinal` Unique: 1, 2, 3, 4 (previous rank breaks ties) ★ | Tied entities never hide each other: they sit side by side, ordered by their previous rank, then by name. |
| `ranking.tieMark` | Mark ties (=2) | Signaler les ex aequo (=2) | toggle | bool | `true` | true / false |  |
| `ranking.topN` | Number of entities (Top N, 0 = all) | Nombre d'entités (Top N, 0 = toutes) | number | integer | `10` | 0 to 200 |  |
| `ranking.topBasis` | Top N based on | Top N calculé | dropdown | enumeration | `period` | `period` Each period (entries and exits); `last` The last period; `any` Any period ★ | Visible when `ranking.topN` = . Each period: an entity leaving the Top N drops into the « Outside the top » row (▼) and comes back up when it returns (▲). |
| `ranking.missing` | Period without a rank | Période sans rang | dropdown | enumeration | `gap` | `gap` Break the line; `connect` Connect points |  |
| `ranking.rankOneTop` | Rank 1 at the top | Rang 1 en haut | toggle | bool | `true` | true / false |  |
| `ranking.highlight` | Highlight from another visual | Surbrillance venue d'un autre visuel | dropdown | enumeration | `dim` | `dim` Dim the other entities; `hide` Hide the others (ranks kept) | Ranks are always computed over every row received: a highlighted entity keeps its rank in the full ranking. To keep the ranking under a filter (slicer), set the other visual's interaction to "Highlight" or put a rank computed with ALL() in "Rank". |

### Ranks or values / Rangs ou valeurs (`view`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `view.mode` | View | Vue | dropdown | enumeration | `rank` | `rank` Ranks (bump chart); `value` Values (lines) ★ | Values: the same lines placed at their value, to see the gaps behind the ranks. |
| `view.toggle` | Ranks / Values button in the visual | Bouton Rangs / Valeurs dans le visuel | toggle | bool | `false` | true / false | Readers switch views; lines glide to their new place. The values view is premium (★). |
| `view.zero` | Values view: include zero | Vue des valeurs : inclure zéro | toggle | bool | `false` | true / false |  |

### Design / Dessin (`design`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `design.type` | Design | Dessin | dropdown | enumeration | `curve` | `curve` S-curves; `straight` Sharp breaks; `step` Steps ★; `stacked` Stacked ribbons (ribbon chart); `metro` Metro map ★; `ribbon` Ribbons sized by value ★ | Metro map: thick lines, 45° bends, round stations and interchanges where entities swap places. Ribbons sized by value: each line is as thick as its value. Stacked ribbons: the Power BI ribbon chart. |
| `design.curvature` | Curvature (%) | Courbure (%) | number | integer | `50` | 0 to 100 | Visible when `design.type` = `curve` or `ribbon` or `stacked` |
| `design.width` | Width | Épaisseur | number | numeric | `3` | 0.5 to 20 | Visible when `design.type` = `curve` or `straight` or `step` or `metro` |
| `design.lineStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `design.type` = `curve` or `straight` or `step` |
| `design.casing` | Casing at crossings | Liseré aux croisements | toggle | bool | `true` | true / false | Visible when `design.type` = `curve` or `straight` or `step` or `metro`. A thin outline in the background color separates the lines where they cross. |
| `design.interchanges` | Interchanges (swapped places) | Correspondances (échanges de places) | toggle | bool | `true` | true / false | Visible when `design.type` = `metro` |
| `design.ribbonSize` | Maximum thickness (% of the row) | Épaisseur maximale (% de la rangée) | number | integer | `80` | 10 to 100 | Visible when `design.type` = `ribbon` |
| `design.spacing` | Spacing (%) | Espacement (%) | number | integer | `12` | 0 to 50 | Visible when `design.type` = `stacked` |
| `design.transparency` | Ribbon transparency (%) | Transparence des rubans (%) | number | integer | `30` | 0 to 90 | Visible when `design.type` = `ribbon` or `stacked` |
| `design.border` | Ribbon border | Bordure des rubans | toggle | bool | `false` | true / false | Visible when `design.type` = `ribbon` or `stacked` |
| `design.totals` | Total above the columns | Total au-dessus des colonnes | toggle | bool | `false` | true / false | Visible when `design.type` = `stacked`. Like the total labels of the native ribbon chart. |

### Markers / Marqueurs (`markers`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `markers.show` | Show | Afficher | dropdown | enumeration | `auto` | `auto` Automatic (when there is room); `all` At every period; `ends` At the start and the end; `none` None |  |
| `markers.shape` | Shape | Forme | dropdown | enumeration | `circle` | `circle` Circle; `square` Square; `diamond` Diamond | Visible when `markers.show` = `auto` or `all` or `ends` |
| `markers.size` | Maximum size (px) | Taille maximale (px) | number | integer | `20` | 4 to 48 | Visible when `markers.show` = `auto` or `all` or `ends` |
| `markers.rankInside` | Rank number inside the marker | Numéro du rang dans le marqueur | toggle | bool | `true` | true / false | Visible when `markers.show` = `auto` or `all` or `ends` |
| `markers.fill` | Fill | Remplissage | dropdown | enumeration | `solid` | `solid` Solid; `hollow` Hollow (colored outline) | Visible when `markers.show` = `auto` or `all` or `ends` |
| `markers.entryExit` | Top N entries and exits (▲ ▼) | Entrées et sorties du Top N (▲ ▼) | toggle | bool | `true` | true / false |  |

### Data labels / Étiquettes de données (`labels`, Format pane)

The card header toggle is `labels.show`.

**Labels / Étiquettes**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `labels.position` | Position | Position | dropdown | enumeration | `below` | `below` Below the point; `above` Above the point |  |
| `labels.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `labels.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `labels.bold` | Bold | Gras | toggle | bool | `false` | true / false |  |
| `labels.halo` | Text halo | Halo autour du texte | toggle | bool | `true` | true / false |  |
| `labels.declutter` | Hide overlapping labels | Masquer les étiquettes qui se chevauchent | toggle | bool | `true` | true / false |  |

**Numbers / Nombres**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `labels.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `labels.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `labels.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `labels.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |

### End labels / Noms aux extrémités (`endLabels`, Format pane)

The card header toggle is `endLabels.show`.

**Names / Noms**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `endLabels.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `endLabels.start` | At the start | Au début | toggle | bool | `true` | true / false |  |
| `endLabels.end` | At the end | À la fin | toggle | bool | `true` | true / false |  |
| `endLabels.content` | Content | Contenu | dropdown | enumeration | `name` | `name` Name; `rankName` Rank and name; `nameValue` Name and value; `rankNameValue` Rank, name and value |  |
| `endLabels.fontSize` | Size | Taille | number | formatting | `10` | 6 to 24 |  |
| `endLabels.color` | Color (empty = entity color) | Couleur (vide = celle de l'entité) | color | fill | (empty) | hex color |  |
| `endLabels.bold` | Bold | Gras | toggle | bool | `false` | true / false |  |
| `endLabels.maxWidth` | Maximum width (% of the visual) | Largeur maximale (% du visuel) | number | integer | `22` | 8 to 45 |  |
| `endLabels.wrap` | Long names on two lines | Noms longs sur deux lignes | toggle | bool | `true` | true / false | A name wider than the reserved room goes on two lines (metro terminus badges included) instead of being cut. |
| `endLabels.images` | Images from the Image field ★ | Images du champ Image ★ | toggle | bool | `true` | true / false | Logos or photos (embedded data:image/…;base64 text) next to the names. Web addresses are ignored: a certified visual loads nothing from the internet. |

**Rank change ★ / Variation de rang ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `endLabels.change` | Show (▲3, ▼2) ★ | Afficher (▲3, ▼2) ★ | toggle | bool | `false` | true / false | Places gained or lost, after the name at the end of each line. |
| `endLabels.changeBase` | Since | Depuis | dropdown | enumeration | `start` | `start` The first period; `prev` The previous period |  |
| `endLabels.upColor` | Places gained | Places gagnées | color | fill | `#2E7D4F` | hex color |  |
| `endLabels.downColor` | Places lost | Places perdues | color | fill | `#C0392B` | hex color |  |

### Period axis / Axe des périodes (`xAxis`, Format pane)

The card header toggle is `xAxis.show`.

**Values / Valeurs**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `xAxis.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `xAxis.position` | Position | Position | dropdown | enumeration | `bottom` | `bottom` Bottom; `top` Top; `both` Top and bottom |  |
| `xAxis.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `xAxis.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `xAxis.dateFormat` | Date format | Format des dates | text | text | (empty) |  |  |

**Axis title / Titre de l'axe**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `xAxis.showTitle` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `xAxis.titleText` | Text | Texte | text | text | (empty) |  | Visible when `xAxis.showTitle` = `true` |

### Rank axis / Axe des rangs (`yAxis`, Format pane)

The card header toggle is `yAxis.show`.

**Values / Valeurs**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `yAxis.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `yAxis.position` | Position | Position | dropdown | enumeration | `left` | `left` Left; `right` Right; `both` Both sides |  |
| `yAxis.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `yAxis.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `yAxis.prefix` | Rank prefix (e.g. #) | Préfixe des rangs (ex. #) | text | text | (empty) |  |  |
| `yAxis.outsideLabel` | Outside-the-top row label | Libellé de la rangée hors top | text | text | (empty) |  |  |

**Axis title / Titre de l'axe**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `yAxis.showTitle` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `yAxis.titleText` | Text | Texte | text | text | (empty) |  | Visible when `yAxis.showTitle` = `true` |

### Gridlines / Quadrillage (`gridlines`, Format pane)

**Vertical (periods) / Vertical (périodes)**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gridlines.vShow` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `gridlines.vColor` | Color (empty = style grid) | Couleur (vide = grille du style) | color | fill | (empty) | hex color |  |
| `gridlines.vWidth` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 |  |
| `gridlines.vStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |

**Horizontal (ranks) / Horizontal (rangs)**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gridlines.hShow` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `gridlines.hColor` | Color (empty = style grid) | Couleur (vide = grille du style) | color | fill | (empty) | hex color |  |
| `gridlines.hWidth` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 |  |
| `gridlines.hStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `gridlines.banding` | Banded rows | Rangées alternées | toggle | bool | `false` | true / false |  |

### Legend / Légende (`legend`, Format pane)

The card header toggle is `legend.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `legend.show` | Show | Afficher | toggle | bool | `false` | true / false | Shown when the chart has several series. |
| `legend.position` | Position | Position | dropdown | enumeration | `top` | `top` Top; `bottom` Bottom; `right` Right; `left` Left |  |
| `legend.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Start; `center` Center; `right` End | Visible when `legend.position` = `top` or `bottom` |
| `legend.showTitle` | Legend title | Titre de la légende | toggle | bool | `false` | true / false |  |
| `legend.titleText` | Title text | Texte du titre | text | text | (empty) |  | Visible when `legend.showTitle` = `true` |
| `legend.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `legend.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `legend.interactive` | Click = select the series | Clic = sélectionner la série | toggle | bool | `true` | true / false |  |

### Ranking zones ★ / Zones de classement ★ (`zones`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

The card header toggle is `zones.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `zones.show` | Show ★ | Afficher ★ | toggle | bool | `false` | true / false | Colored bands behind the first and the last ranks: podium, qualification, relegation… |
| `zones.topCount` | Top zone: number of ranks | Zone haute : nombre de rangs | number | integer | `3` | 0 to 50 |  |
| `zones.topLabel` | Top zone label | Libellé de la zone haute | text | text | (empty) |  |  |
| `zones.topColor` | Top zone color | Couleur de la zone haute | color | fill | `#2E7D4F` | hex color |  |
| `zones.bottomCount` | Bottom zone: number of ranks | Zone basse : nombre de rangs | number | integer | `0` | 0 to 50 |  |
| `zones.bottomLabel` | Bottom zone label | Libellé de la zone basse | text | text | (empty) |  |  |
| `zones.bottomColor` | Bottom zone color | Couleur de la zone basse | color | fill | `#C0392B` | hex color |  |
| `zones.opacity` | Opacity (%) | Opacité (%) | number | integer | `10` | 3 to 50 |  |

### Annotations ★ (`annotations`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

The card header toggle is `annotations.show`.

**Content / Contenu**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `annotations.list` | Annotations (one per line) | Annotations (une par ligne) | textarea | text | (empty) |  | One line per annotation: "period \| text" (vertical marker on the period) or "period \| entity \| text" (attached to the entity's point). Period: date (2024-06-01, 2024-06, 06/15/2024), year, number or displayed label. "\n" starts a new line. The former "entity \| period \| text" order is still read. The Annotations ★ field adds notes from a text measure. |
| `annotations.content` | Displayed content | Contenu affiché | dropdown | enumeration | `text` | `text` Text; `textRank` Text and rank; `textValue` Text and value |  |
| `annotations.editOnChart` | Edit on the chart (edit mode) | Modifier sur le graphique (mode édition) | toggle | bool | `true` | true / false | In edit mode, annotations can be dragged, edited with a double-click and removed with ×. |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.style` | Style | Style | dropdown | enumeration | `bubble` | `bubble` Bubble; `filled` Filled label; `plain` Text only |  |
| `annotations.color` | Color (empty = entity color) | Couleur (vide = celle de l'entité) | color | fill | (empty) | hex color |  |
| `annotations.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `annotations.bold` | Bold | Gras | toggle | bool | `false` | true / false |  |
| `annotations.maxWidth` | Maximum width (px) | Largeur maximale (px) | number | integer | `160` | 60 to 400 |  |

**Marker and connector / Repère et trait**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.marker` | Marker on the point | Repère sur le point | toggle | bool | `true` | true / false |  |
| `annotations.connector` | Connector | Trait vers le point | dropdown | enumeration | `line` | `line` Line; `none` None |  |
| `annotations.connectorStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `annotations.connector` = `line` |
| `annotations.position` | Default position | Position par défaut | dropdown | enumeration | `auto` | `auto` Automatic (no overlap); `above` Above; `below` Below; `right` Right; `left` Left | Position of annotations that have not been dragged. |
| `annotations.distance` | Distance from the point (px) | Distance au point (px) | number | integer | `22` | 6 to 160 |  |

### Playback / Lecture (`play`, Format pane)

**Line drawing / Dessin des lignes**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.draw` | Draw the lines period by period | Dessiner les lignes période par période | toggle | bool | `true` | true / false | When the data changes, the lines draw themselves from the first period to the last. Off when animations are reduced (Style › Animations or the system). |
| `play.drawDuration` | Drawing duration (ms) | Durée du dessin (ms) | number | integer | `1400` | 200 to 8000 | Visible when `play.draw` = `true` |

**Playback ★ / Lecture ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.speed` | Duration of a frame (ms) | Durée d'une image (ms) | number | integer | `700` | 100 to 10000 | At speed ×1; the speed button of the play bar multiplies it (×0.5 to ×4) for the session. |
| `play.loop` | Loop | Lecture en boucle | toggle | bool | `false` | true / false |  |
| `play.autoPlay` | Play automatically on opening ★ | Lecture automatique à l'ouverture ★ | toggle | bool | `false` | true / false | Once, from the first frame. Not when animations are reduced (Style › Animations or the system) nor on a dashboard tile. |
| `play.transition` | Animated transitions | Transitions animées | toggle | bool | `true` | true / false | Values, positions and colors move smoothly from one frame to the next. |
| `play.follow` | Labels follow the head of the lines | Étiquettes qui suivent la tête des lignes | toggle | bool | `true` | true / false |  |

**Play bar ★ / Barre de lecture ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.controls` | Play bar ★ | Barre de lecture ★ | toggle | bool | `false` | true / false |  |
| `play.button` | Discreet ▶ button (on hover) ★ | Bouton ▶ discret (au survol) ★ | toggle | bool | `false` | true / false | Visible when `play.controls` = `false`. Without the play bar: a small round button at the top right of the chart, shown on hover. |
| `play.position` | Bar position | Position de la barre | dropdown | enumeration | `bottom` | `bottom` Bottom; `top` Top | Visible when `play.controls` = `true` |
| `play.ticks` | Tick marks | Graduations | dropdown | enumeration | `auto` | `auto` Automatic; `all` Every frame; `none` None | Visible when `play.controls` = `true` |
| `play.tickLabels` | Tick labels | Étiquettes des graduations | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.stepButtons` | Start and end buttons | Boutons début et fin | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.speedButton` | Speed button | Bouton de vitesse | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |

**Large value ★ / Valeur en grand ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.showLabel` | Current value in large type | Valeur en cours en grand | toggle | bool | `true` | true / false |  |
| `play.labelSize` | Large value size | Taille de la valeur en grand | number | formatting | `40` | 12 to 160 | Visible when `play.showLabel` = `true` |
| `play.labelPosition` | Large value position | Position de la valeur en grand | dropdown | enumeration | `bottomRight` | `bottomRight` Bottom right; `topRight` Top right; `topLeft` Top left; `bottomLeft` Bottom left; `center` Center | Visible when `play.showLabel` = `true` |

### Interactions (`interaction`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `interaction.hover` | Highlight on hover | Mettre en avant au survol | toggle | bool | `true` | true / false |  |
| `interaction.dim` | Dimmed items opacity (%) | Opacité des éléments estompés (%) | number | integer | `25` | 5 to 80 |  |
| `interaction.front` | Hover: entity in front | Survol : entité au premier plan | toggle | bool | `true` | true / false | The hovered line comes in front of the others, which fade. |

### Tooltips / Infobulles (`tooltip`, Format pane)

The card header toggle is `tooltip.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `tooltip.show` | Show | Afficher | toggle | bool | `true` | true / false | Tooltip on hover (with the fields of the "Tooltips" well and report page tooltips). |
| `tooltip.value` | Value | Valeur | toggle | bool | `true` | true / false |  |
| `tooltip.change` | Change since the previous period | Variation depuis la période précédente | toggle | bool | `true` | true / false |  |
| `tooltip.best` | Best rank | Meilleur rang | toggle | bool | `true` | true / false |  |

### Title / Titre (`title`, Format pane)

The card header toggle is `title.show`.

**Title / Titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `title.text` | Text | Texte | text | text | (empty) |  | Leave empty for an automatic title built from the fields. |
| `title.fontSize` | Size | Taille | number | formatting | `14` | 7 to 40 |  |
| `title.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `title.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `title.underline` | Underline | Souligné | toggle | bool | `false` | true / false |  |
| `title.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `title.bgColor` | Background color | Couleur d'arrière-plan | color | fill | (empty) | hex color |  |
| `title.align` | Horizontal alignment | Alignement horizontal | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |
| `title.wrap` | Text wrap | Retour automatique à la ligne | toggle | bool | `true` | true / false |  |

**Subtitle / Sous-titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.subtitle` | Subtitle | Sous-titre | text | text | (empty) |  | Several lines allowed: type \n to go to the next line. |
| `title.subFontSize` | Size | Taille | number | formatting | `11` | 7 to 30 | Visible when `title.subtitle` =  |
| `title.subColor` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | Visible when `title.subtitle` =  |
| `title.subItalic` | Italic | Italique | toggle | bool | `false` | true / false | Visible when `title.subtitle` =  |

**Divider / Séparateur**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.divider` | Show divider | Afficher le séparateur | toggle | bool | `false` | true / false |  |
| `title.dividerColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `title.divider` = `true` |
| `title.dividerStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `title.divider` = `true` |
| `title.dividerWidth` | Width | Épaisseur | number | integer | `1` | 1 to 6 | Visible when `title.divider` = `true` |

**Spacing / Espacement**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.spaceBelow` | Space below the title (px) | Espace sous le titre (px) | number | integer | `4` | 0 to 40 |  |

### Source note / Note de source (`source`, Format pane)

The card header toggle is `source.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `source.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `source.text` | Text | Texte | text | text | (empty) |  |  |
| `source.fontSize` | Size | Taille | number | formatting | `9` | 6 to 20 |  |
| `source.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `source.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `source.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |

### Frame / Cadre (`container`, Format pane)

**Background / Arrière-plan**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.bgShow` | Background | Arrière-plan | toggle | bool | `false` | true / false |  |
| `container.bgColor` | Color | Couleur | color | fill | `#FFFFFF` | hex color | Visible when `container.bgShow` = `true` |
| `container.bgColor2` | Gradient end (optional) | Fin du dégradé (optionnel) | color | fill | (empty) | hex color | Visible when `container.bgShow` = `true` |
| `container.bgTransparency` | Transparency (%) | Transparence (%) | slider | numeric | `0` | 0 to 100 | Visible when `container.bgShow` = `true` |

**Border / Bordure**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `false` | true / false |  |
| `container.borderColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `container.border` = `true` |
| `container.borderWidth` | Width | Épaisseur | number | integer | `1` | 0 to 6 | Visible when `container.border` = `true` |
| `container.radius` | Rounded corners | Coins arrondis | number | integer | `8` | 0 to 24 |  |

**Shadow / Ombre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.shadow` | Shadow | Ombre | toggle | bool | `false` | true / false |  |
| `container.shadowColor` | Color (empty = soft) | Couleur (vide = douce) | color | fill | (empty) | hex color | Visible when `container.shadow` = `true` |
| `container.shadowSize` | Blur (px) | Flou (px) | number | integer | `12` | 0 to 40 | Visible when `container.shadow` = `true` |

**Spacing / Marges**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.padding` | Inner padding | Marge intérieure | number | integer | `8` | 0 to 40 |  |

### Language and numbers / Langue et nombres (`texts`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `texts.language` | Interface language | Langue de l'interface | dropdown | enumeration | `auto` | `auto` Same as Power BI; `fr` French; `en` English |  |
| `texts.numberLocale` | Number format locale (e.g. en-GB) | Format des nombres (ex. fr-FR) | text | text | (empty) |  | Thousands and decimal separators. Empty: same as Power BI. |

### Other objects (not in the Format pane cards above)

- `annotState`: `annotState.offsets` (text), internal state saved by the visual in edit mode (column widths, positions of dragged annotations); leave it alone.