Implementing Pyramid Charts (SfPyramidChart)
The Syncfusion Flutter SfPyramidChart widget renders high-performance pyramid charts natively in Dart. It visualizes proportional or hierarchical data as stacked triangular segments, making it ideal for sales funnels, population distribution, organizational hierarchy, and process stage analysis.
When to Use This Skill
- User wants to render a pyramid chart in a Flutter application
- User references
SfPyramidChart, PyramidSeries, or syncfusion_flutter_charts
- User needs to customize pyramid segments (color, gap, explode, mode)
- User wants to add labels, legend, tooltip, or selection to a pyramid chart
- User needs to export a pyramid chart as PNG or PDF
- User asks about RTL support or accessibility in Syncfusion Flutter charts
Documentation and Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Package installation and pubspec.yaml setup
- Import statement and basic widget initialization
- Binding data source with xValueMapper / yValueMapper
- Adding title, data labels, legend, and tooltip
- Minimal runnable example
Pyramid Customization
📄 Read: references/pyramid-customization.md
- PyramidMode: linear (height-based) vs surface (area-based)
- Changing pyramid size with
height and width (percentage strings)
- Gap between segments using
gapRatio (0 to 1)
- Exploding segments:
explode, explodeIndex, explodeOffset
- Palette colors, border color/width, opacity, pointColorMapper
Series Customization
📄 Read: references/series-customization.md
- Animation:
animationDuration and animationDelay
- Handling null/empty data points with
EmptyPointSettings
- Empty point modes: gap, zero, drop, average
- Color mapping per data point via
pointColorMapper
Data Labels
📄 Read: references/data-labels.md
- Enabling data labels with
DataLabelSettings(isVisible: true)
- Inside vs outside positioning (
labelPosition)
- Connector line settings (type, color, length)
- Custom label templates via
builder
- Smart labels and
labelIntersectAction
- Overflow mode and hiding zero-value labels
Legend and Tooltip
📄 Read: references/legend-and-tooltip.md
- Enabling and positioning the legend
- Legend title, item templates, overflow behavior
- Toggle series visibility via legend tap
- Enabling tooltip with
TooltipBehavior
- Tooltip formatting, custom templates, activation mode
Selection and Callbacks
📄 Read: references/selection-and-callbacks.md
- Enabling segment selection with
SelectionBehavior
- Multi-selection, toggle selection, initial selection
- Programmatic selection via
selectDataPoints
- Key callbacks:
onPointTap, onSelectionChanged, onTooltipRender
onRendererCreated for dynamic data updates via PyramidSeriesController
Appearance, Export, and RTL
📄 Read: references/appearance-export-rtl.md
- Chart title customization (
ChartTitle)
- Chart sizing, margin, background color/image
- Exporting chart as PNG image or PDF document
- RTL support using
Directionality widget or locale
- Accessibility: contrast, font scaling, tap targets
pixelToPoint method for coordinate conversion
Quick Start Example
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';
class PyramidChartExample extends StatelessWidget {
final List<ChartData> chartData = [
ChartData('Enterprise', 654),
ChartData('Mid-Market', 575),
ChartData('SMB', 446),
ChartData('Startup', 341),
ChartData('Individual', 160),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: SfPyramidChart(
title: ChartTitle(text: 'Sales Pipeline'),
legend: Legend(isVisible: true),
series: PyramidSeries<ChartData, String>(
dataSource: chartData,
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
dataLabelSettings: DataLabelSettings(isVisible: true),
),
),
);
}
}
class ChartData {
ChartData(this.x, this.y);
final String x;
final double y;
}
Common Patterns
Exploding a specific segment
PyramidSeries<ChartData, String>(
explode: true,
explodeIndex: 0, // Index of segment to highlight
explodeOffset: '5%', // Distance the segment moves out
dataSource: chartData,
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
)
Surface mode (area proportional)
PyramidSeries<ChartData, String>(
pyramidMode: PyramidMode.surface, // Area ∝ Y value (vs linear: height ∝ Y)
dataSource: chartData,
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
)
Tooltip + selection together
// In initState:
_tooltipBehavior = TooltipBehavior(enable: true);
_selectionBehavior = SelectionBehavior(enable: true);
// In widget:
SfPyramidChart(
tooltipBehavior: _tooltipBehavior,
series: PyramidSeries<ChartData, String>(
selectionBehavior: _selectionBehavior,
dataSource: chartData,
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
),
)
Key Properties
| Property |
Type |
Description |
series |
PyramidSeries |
The pyramid data series (one per chart) |
title |
ChartTitle |
Chart title widget |
legend |
Legend |
Legend configuration |
tooltipBehavior |
TooltipBehavior |
Tooltip enable/customize |
enableMultiSelection |
bool |
Allow selecting multiple segments |
palette |
List<Color> |
Custom segment colors |
pyramidMode |
PyramidMode |
linear or surface sizing |
gapRatio |
double |
Gap between segments (0–1) |
explode |
bool |
Enable segment explode on tap |
1---2name: syncfusion-flutter-pyramid-charts3description: Implements Syncfusion Flutter Pyramid Charts (SfPyramidChart, PyramidSeries) for proportional and hierarchical data visualization. Use when working with pyramid charts, funnel-style visualizations, or segment-based data comparisons in Flutter. This skill covers series configuration, segment exploding, gap ratio, PyramidMode, data labels, legends, and tooltip customization.4---56# Implementing Pyramid Charts (SfPyramidChart)78The Syncfusion Flutter `SfPyramidChart` widget renders high-performance pyramid charts natively in Dart. It visualizes proportional or hierarchical data as stacked triangular segments, making it ideal for sales funnels, population distribution, organizational hierarchy, and process stage analysis.910## When to Use This Skill1112- User wants to render a pyramid chart in a Flutter application13- User references `SfPyramidChart`, `PyramidSeries`, or `syncfusion_flutter_charts`14- User needs to customize pyramid segments (color, gap, explode, mode)15- User wants to add labels, legend, tooltip, or selection to a pyramid chart16- User needs to export a pyramid chart as PNG or PDF17- User asks about RTL support or accessibility in Syncfusion Flutter charts1819## Documentation and Navigation Guide2021### Getting Started22📄 **Read:** [references/getting-started.md](references/getting-started.md)23- Package installation and pubspec.yaml setup24- Import statement and basic widget initialization25- Binding data source with xValueMapper / yValueMapper26- Adding title, data labels, legend, and tooltip27- Minimal runnable example2829### Pyramid Customization30📄 **Read:** [references/pyramid-customization.md](references/pyramid-customization.md)31- PyramidMode: linear (height-based) vs surface (area-based)32- Changing pyramid size with `height` and `width` (percentage strings)33- Gap between segments using `gapRatio` (0 to 1)34- Exploding segments: `explode`, `explodeIndex`, `explodeOffset`35- Palette colors, border color/width, opacity, pointColorMapper3637### Series Customization38📄 **Read:** [references/series-customization.md](references/series-customization.md)39- Animation: `animationDuration` and `animationDelay`40- Handling null/empty data points with `EmptyPointSettings`41- Empty point modes: gap, zero, drop, average42- Color mapping per data point via `pointColorMapper`4344### Data Labels45📄 **Read:** [references/data-labels.md](references/data-labels.md)46- Enabling data labels with `DataLabelSettings(isVisible: true)`47- Inside vs outside positioning (`labelPosition`)48- Connector line settings (type, color, length)49- Custom label templates via `builder`50- Smart labels and `labelIntersectAction`51- Overflow mode and hiding zero-value labels5253### Legend and Tooltip54📄 **Read:** [references/legend-and-tooltip.md](references/legend-and-tooltip.md)55- Enabling and positioning the legend56- Legend title, item templates, overflow behavior57- Toggle series visibility via legend tap58- Enabling tooltip with `TooltipBehavior`59- Tooltip formatting, custom templates, activation mode6061### Selection and Callbacks62📄 **Read:** [references/selection-and-callbacks.md](references/selection-and-callbacks.md)63- Enabling segment selection with `SelectionBehavior`64- Multi-selection, toggle selection, initial selection65- Programmatic selection via `selectDataPoints`66- Key callbacks: `onPointTap`, `onSelectionChanged`, `onTooltipRender`67- `onRendererCreated` for dynamic data updates via `PyramidSeriesController`6869### Appearance, Export, and RTL70📄 **Read:** [references/appearance-export-rtl.md](references/appearance-export-rtl.md)71- Chart title customization (`ChartTitle`)72- Chart sizing, margin, background color/image73- Exporting chart as PNG image or PDF document74- RTL support using `Directionality` widget or locale75- Accessibility: contrast, font scaling, tap targets76- `pixelToPoint` method for coordinate conversion7778## Quick Start Example7980```dart81import 'package:flutter/material.dart';82import 'package:syncfusion_flutter_charts/charts.dart';8384class PyramidChartExample extends StatelessWidget {85 final List<ChartData> chartData = [86 ChartData('Enterprise', 654),87 ChartData('Mid-Market', 575),88 ChartData('SMB', 446),89 ChartData('Startup', 341),90 ChartData('Individual', 160),91 ];9293 @override94 Widget build(BuildContext context) {95 return Scaffold(96 body: SfPyramidChart(97 title: ChartTitle(text: 'Sales Pipeline'),98 legend: Legend(isVisible: true),99 series: PyramidSeries<ChartData, String>(100 dataSource: chartData,101 xValueMapper: (ChartData data, _) => data.x,102 yValueMapper: (ChartData data, _) => data.y,103 dataLabelSettings: DataLabelSettings(isVisible: true),104 ),105 ),106 );107 }108}109110class ChartData {111 ChartData(this.x, this.y);112 final String x;113 final double y;114}115```116117## Common Patterns118119### Exploding a specific segment120```dart121PyramidSeries<ChartData, String>(122 explode: true,123 explodeIndex: 0, // Index of segment to highlight124 explodeOffset: '5%', // Distance the segment moves out125 dataSource: chartData,126 xValueMapper: (ChartData data, _) => data.x,127 yValueMapper: (ChartData data, _) => data.y,128)129```130131### Surface mode (area proportional)132```dart133PyramidSeries<ChartData, String>(134 pyramidMode: PyramidMode.surface, // Area ∝ Y value (vs linear: height ∝ Y)135 dataSource: chartData,136 xValueMapper: (ChartData data, _) => data.x,137 yValueMapper: (ChartData data, _) => data.y,138)139```140141### Tooltip + selection together142```dart143// In initState:144_tooltipBehavior = TooltipBehavior(enable: true);145_selectionBehavior = SelectionBehavior(enable: true);146147// In widget:148SfPyramidChart(149 tooltipBehavior: _tooltipBehavior,150 series: PyramidSeries<ChartData, String>(151 selectionBehavior: _selectionBehavior,152 dataSource: chartData,153 xValueMapper: (ChartData data, _) => data.x,154 yValueMapper: (ChartData data, _) => data.y,155 ),156)157```158159## Key Properties160161| Property | Type | Description |162|---|---|---|163| `series` | `PyramidSeries` | The pyramid data series (one per chart) |164| `title` | `ChartTitle` | Chart title widget |165| `legend` | `Legend` | Legend configuration |166| `tooltipBehavior` | `TooltipBehavior` | Tooltip enable/customize |167| `enableMultiSelection` | `bool` | Allow selecting multiple segments |168| `palette` | `List<Color>` | Custom segment colors |169| `pyramidMode` | `PyramidMode` | `linear` or `surface` sizing |170| `gapRatio` | `double` | Gap between segments (0–1) |171| `explode` | `bool` | Enable segment explode on tap |