Implementing Syncfusion React Bullet Charts
A skill for implementing and customizing Syncfusion's React Bullet Chart component. Bullet charts are compact data visualization components designed to compare a primary measure (actual value) against a target measure within qualitative ranges.
When to Use This Skill
Use this skill when users need to:
- Display performance metrics or KPIs with target comparisons
- Create compact data visualizations showing actual vs. target values
- Visualize progress against goals with qualitative ranges (poor/good/excellent)
- Build dashboards with space-efficient performance indicators
- Show feature measures (actual bars) compared to comparative measures (target bars)
- Implement horizontal or vertical bullet charts
- Display multiple metrics in a compact layout
- Create accessible, keyboard-navigable chart visualizations
Component Overview
The Bullet Chart consists of:
- Value Bar (Feature Measure): The primary data/actual value being measured
- Comparative Bar (Target Marker): The target or comparison value
- Qualitative Ranges: Background bands indicating performance levels (e.g., poor, satisfactory, good)
- Quantitative Scale: The axis showing numerical measurements
- Title/Subtitle: Descriptive text for the chart
Documentation and Navigation Guide
Getting Started
📄 Read: references/getting-started.md
API Reference
📄 Read: references/api.md
- Summarizes
BulletChartComponent props, methods, events and directives used across examples
Data Binding
📄 Read: references/data-binding.md
Value Bar Configuration
📄 Read: references/value-bar.md
- Value bar (Feature Measure) overview and purpose
- Mapping valueField from data source
- Types of actual bar shapes (Rect, Dot)
- Changing bar type with type property
- Border customization using valueBorder (color, width)
- Fill color customization using valueFill
- Height customization using valueHeight
- Binding colors dynamically from dataSource
- Complete examples for each customization option
Comparative Bar Configuration
📄 Read: references/comparative-bar.md
- Comparative bar (Target Measure) overview
- Mapping targetField from data source
- Types of target bar shapes (Circle, Cross, Rect)
- Changing target type with targetTypes property
- Customizing target appearance with targetColor
- Adjusting target width with targetWidth property
- Binding target colors from dataSource
- Complete examples for each target type
Ranges Configuration
📄 Read: references/ranges.md
- Ranges representing qualitative bands (Good, Bad, Satisfactory)
- Using BulletRangeCollectionDirective and BulletRangeDirective
- Setting range boundaries with end property
- Understanding minimum value as range starting point
- Configuring multiple ranges for different quality levels
- Color customization with color property
- Opacity adjustment with opacity property
- Complete examples with multiple colored ranges
Titles and Subtitles
📄 Read: references/titles.md
- Adding chart title with title property
- Adding subtitle for additional information
- Title positioning with titlePosition property (Left, Right, Top, Bottom)
- Default position (Top) behavior
- Title style customization with titleStyle (color, opacity, font properties)
- Subtitle style customization with subtitleStyle (color, opacity, font properties)
- Complete examples for each position
- Font customization examples (size, family, weight, style)
Tooltips
📄 Read: references/tooltips.md
- Default tooltip behavior (hidden by default)
- Enabling tooltips with tooltip.enable property
- Injecting BulletTooltip module into services
- Displaying actual and target values on hover
- Creating custom templates with template property
- Using ${target} and ${value} placeholders in templates
- Tooltip appearance customization (fill, border, textStyle)
- Font customization for tooltip text
- Complete examples for default and custom tooltips
Data Labels
📄 Read: references/data-labels.md
- Data labels for identifying actual bar values
- Enabling data labels with dataLabel.enable property
- Label display behavior and positioning
- Style customization with labelStyle property
- Font properties (size, family, weight, style)
- Color and opacity adjustments
- Complete examples with styled data labels
Axis Customization
📄 Read: references/axis-customization.md
- MajorTickLines customization (width, height, color, useRangeColor)
- MinorTickLines customization (width, height, color, useRangeColor)
- Tick placement with tickPosition (Inside, Outside)
- Label formatting with labelFormat (globalize formats: n1, n2, p1, c1, etc.)
- Format table showing common number, percentage, and currency formats
- Group separator for thousands with enableGroupSeparator
- Custom label format with ${value} placeholder
- Label placement with labelPosition (Inside, Outside)
- Opposed position with opposedPosition property
- Category labels with categoryField for X-axis
- Category label styling with categoryLabelStyle and labelStyle
- useRangeColor for labels matching range colors
- Complete examples for each axis feature
Chart Dimensions
📄 Read: references/dimensions.md
- Container size configuration with inline styles and CSS
- Setting chart dimensions with width and height properties
- Pixel sizing for fixed dimensions
- Percentage sizing for responsive behavior relative to container
- Default size behavior (126px height, window width)
- Complete examples for container and direct sizing
Customization Options
📄 Read: references/customization.md
- Orientation with orientation property (Horizontal, Vertical)
- Default Horizontal orientation
- Right-to-left (RTL) support with enableRtl property
- Animation configuration with animation property (duration, delay)
- Linear animation for actual and target bars
- Theme support with theme property
- Available Syncfusion themes
- Complete examples for each customization
Accessibility
📄 Read: references/accessibility.md
- Accessibility compliance (ADA, Section 508, WCAG 2.2)
- Accessibility features table with compatibility status
- WAI-ARIA attributes and patterns (img role, button role, aria-label, aria-pressed)
- Keyboard interaction support (Tab, Shift+Tab, Ctrl+P)
- Screen reader support
- Right-to-left (RTL) support for internationalization
- Color contrast compliance
- Mobile device support
- Testing with accessibility-checker and axe-core tools
- Sample accessibility demo reference
Quick Start Example
import { BulletChartComponent, BulletRangeCollectionDirective, BulletRangeDirective, BulletTooltip, Inject } from '@syncfusion/ej2-react-charts';
function App() {
const data = [
{ value: 270, target: 250 }
];
return (
<BulletChartComponent
id="bulletChart"
dataSource={data}
valueField="value"
targetField="target"
title="Revenue"
minimum={0}
maximum={300}
interval={50}
tooltip={{ enable: true }}
>
<BulletRangeCollectionDirective>
<BulletRangeDirective end={150} color="red" />
<BulletRangeDirective end={250} color="yellow" />
<BulletRangeDirective end={300} color="green" />
</BulletRangeCollectionDirective>
<Inject services={[BulletTooltip]} />
</BulletChartComponent>
);
}
Common Patterns
Performance Dashboard with Multiple Metrics
Display multiple bullet charts vertically to show various KPIs:
const metrics = [
{ value: 270, target: 250, category: 'Revenue' },
{ value: 85, target: 100, category: 'Profit' },
{ value: 180, target: 150, category: 'Sales' }
];
// Map each metric to a separate BulletChartComponent with categoryField
Dynamic Color from Data
Bind colors directly from your data source:
const data = [
{ value: 270, target: 250, valueColor: '#5B5FC7', targetColor: '#646464' }
];
<BulletChartComponent
dataSource={data}
valueFill="valueColor"
targetColor="targetColor"
/>
Custom Tooltip Template
Show formatted values with custom HTML:
<BulletChartComponent
tooltip={{
enable: true,
template: '<div><b>Actual:</b> ${value}<br/><b>Target:</b> ${target}</div>'
}}
/>
Responsive Layout
Use percentage-based sizing for responsive dashboards:
<BulletChartComponent
width="100%"
height="80px"
/>
Key Props
| Property |
Type |
Purpose |
dataSource |
Array |
Data collection for the chart |
valueField |
string |
Field name for actual/feature measure |
targetField |
string |
Field name for target/comparative measure |
minimum |
number |
Minimum value of quantitative scale |
maximum |
number |
Maximum value of quantitative scale |
interval |
number |
Interval between axis labels |
title |
string |
Chart title text |
subtitle |
string |
Chart subtitle text |
type |
string |
Value bar shape: 'Rect' or 'Dot' |
targetTypes |
string[] |
Target bar shapes: 'Circle', 'Cross', 'Rect' |
orientation |
string |
Chart orientation: 'Horizontal' or 'Vertical' |
width |
string |
Chart width (pixels or percentage) |
height |
string |
Chart height (pixels or percentage) |
enableRtl |
boolean |
Enable right-to-left rendering |
theme |
string |
Apply Syncfusion theme |
tooltip |
object |
Tooltip configuration with enable, template, fill, border, textStyle |
dataLabel |
object |
Data label configuration with enable, labelStyle |
Common Use Cases
KPI Dashboard
Use bullet charts to display multiple performance indicators:
- Set different targets for each metric
- Use red/yellow/green ranges for performance levels
- Add category labels for metric names
- Enable tooltips for detailed information
Sales Performance Tracker
Compare actual sales against targets:
- Map revenue data to valueField
- Set quarterly/monthly targets in targetField
- Configure ranges for underperforming/meeting/exceeding targets
- Use data labels to show exact values
Progress Indicators
Show progress toward goals with visual context:
- Use percentage-based ranges (0-50%, 50-75%, 75-100%)
- Customize colors to match brand guidelines
- Add animations for engaging transitions
- Position titles on the left for compact layout
Comparative Analysis
Compare multiple items side-by-side:
- Use vertical orientation for space efficiency
- Set consistent scale across all charts
- Apply category labels for clear identification
- Customize target types (Circle, Cross) for distinction
Mobile Dashboards
Create responsive, touch-friendly visualizations:
- Use percentage-based dimensions
- Increase touch target sizes for bars
- Enable mobile-optimized tooltips
- Test with accessibility tools for screen readers
Edge Cases and Troubleshooting
Data not displaying:
- Verify valueField and targetField match data source property names
- Check that dataSource is an array with valid objects
- Ensure minimum/maximum encompass your data range
Ranges not visible:
- Import BulletRangeCollectionDirective and BulletRangeDirective from @syncfusion/ej2-react-charts
- Set end values in ascending order
- Verify end values are within minimum/maximum bounds
Tooltips not working:
- Inject BulletTooltip module:
<Inject services={[BulletTooltip]} />
- Set tooltip.enable to true
- Check that tooltip object is properly configured
Title/subtitle overlapping:
- Adjust titlePosition to Left, Right, Top, or Bottom
- Increase chart dimensions (width/height)
- Customize titleStyle and subtitleStyle font sizes
Axis labels cut off:
- Increase chart width or height
- Adjust label format to shorter notation (e.g., 'n1' instead of full numbers)
- Use enableGroupSeparator for better readability
Implementation Checklist
1---
2name: syncfusion-react-bullet-chart
3description: Implements the Syncfusion React Bullet Chart component for KPI and performance indicator visualization. Use this when users need feature measure displays, comparative measures, target comparisons, or metric visualizations. Covers data binding, value bars, target bars, ranges, titles, tooltips, data labels, axis customization, orientation, and accessibility.
4metadata:
5 author: "Syncfusion Inc"
6 version: "34.1.29"
7 category: "Data Visualization"
8---
9
10# Implementing Syncfusion React Bullet Charts
11
12A skill for implementing and customizing Syncfusion's React Bullet Chart component. Bullet charts are compact data visualization components designed to compare a primary measure (actual value) against a target measure within qualitative ranges.
13
14## When to Use This Skill
15
16Use this skill when users need to:
17- Display performance metrics or KPIs with target comparisons
18- Create compact data visualizations showing actual vs. target values
19- Visualize progress against goals with qualitative ranges (poor/good/excellent)
20- Build dashboards with space-efficient performance indicators
21- Show feature measures (actual bars) compared to comparative measures (target bars)
22- Implement horizontal or vertical bullet charts
23- Display multiple metrics in a compact layout
24- Create accessible, keyboard-navigable chart visualizations
25
26## Component Overview
27
28The Bullet Chart consists of:
29- **Value Bar (Feature Measure)**: The primary data/actual value being measured
30- **Comparative Bar (Target Marker)**: The target or comparison value
31- **Qualitative Ranges**: Background bands indicating performance levels (e.g., poor, satisfactory, good)
32- **Quantitative Scale**: The axis showing numerical measurements
33- **Title/Subtitle**: Descriptive text for the chart
34
35## Documentation and Navigation Guide
36
37### Getting Started
38📄 **Read:** [references/getting-started.md](references/getting-started.md)
39
40### API Reference
41📄 **Read:** [references/api.md](references/api.md)
42- Summarizes `BulletChartComponent` props, methods, events and directives used across examples
43
44### Data Binding
45📄 **Read:** [references/data-binding.md](references/data-binding.md)
46
47### Value Bar Configuration
48📄 **Read:** [references/value-bar.md](references/value-bar.md)
49- Value bar (Feature Measure) overview and purpose
50- Mapping valueField from data source
51- Types of actual bar shapes (Rect, Dot)
52- Changing bar type with type property
53- Border customization using valueBorder (color, width)
54- Fill color customization using valueFill
55- Height customization using valueHeight
56- Binding colors dynamically from dataSource
57- Complete examples for each customization option
58
59### Comparative Bar Configuration
60📄 **Read:** [references/comparative-bar.md](references/comparative-bar.md)
61- Comparative bar (Target Measure) overview
62- Mapping targetField from data source
63- Types of target bar shapes (Circle, Cross, Rect)
64- Changing target type with targetTypes property
65- Customizing target appearance with targetColor
66- Adjusting target width with targetWidth property
67- Binding target colors from dataSource
68- Complete examples for each target type
69
70### Ranges Configuration
71📄 **Read:** [references/ranges.md](references/ranges.md)
72- Ranges representing qualitative bands (Good, Bad, Satisfactory)
73- Using BulletRangeCollectionDirective and BulletRangeDirective
74- Setting range boundaries with end property
75- Understanding minimum value as range starting point
76- Configuring multiple ranges for different quality levels
77- Color customization with color property
78- Opacity adjustment with opacity property
79- Complete examples with multiple colored ranges
80
81### Titles and Subtitles
82📄 **Read:** [references/titles.md](references/titles.md)
83- Adding chart title with title property
84- Adding subtitle for additional information
85- Title positioning with titlePosition property (Left, Right, Top, Bottom)
86- Default position (Top) behavior
87- Title style customization with titleStyle (color, opacity, font properties)
88- Subtitle style customization with subtitleStyle (color, opacity, font properties)
89- Complete examples for each position
90- Font customization examples (size, family, weight, style)
91
92### Tooltips
93📄 **Read:** [references/tooltips.md](references/tooltips.md)
94- Default tooltip behavior (hidden by default)
95- Enabling tooltips with tooltip.enable property
96- Injecting BulletTooltip module into services
97- Displaying actual and target values on hover
98- Creating custom templates with template property
99- Using ${target} and ${value} placeholders in templates
100- Tooltip appearance customization (fill, border, textStyle)
101- Font customization for tooltip text
102- Complete examples for default and custom tooltips
103
104### Data Labels
105📄 **Read:** [references/data-labels.md](references/data-labels.md)
106- Data labels for identifying actual bar values
107- Enabling data labels with dataLabel.enable property
108- Label display behavior and positioning
109- Style customization with labelStyle property
110- Font properties (size, family, weight, style)
111- Color and opacity adjustments
112- Complete examples with styled data labels
113
114### Axis Customization
115📄 **Read:** [references/axis-customization.md](references/axis-customization.md)
116- MajorTickLines customization (width, height, color, useRangeColor)
117- MinorTickLines customization (width, height, color, useRangeColor)
118- Tick placement with tickPosition (Inside, Outside)
119- Label formatting with labelFormat (globalize formats: n1, n2, p1, c1, etc.)
120- Format table showing common number, percentage, and currency formats
121- Group separator for thousands with enableGroupSeparator
122- Custom label format with ${value} placeholder
123- Label placement with labelPosition (Inside, Outside)
124- Opposed position with opposedPosition property
125- Category labels with categoryField for X-axis
126- Category label styling with categoryLabelStyle and labelStyle
127- useRangeColor for labels matching range colors
128- Complete examples for each axis feature
129
130### Chart Dimensions
131📄 **Read:** [references/dimensions.md](references/dimensions.md)
132- Container size configuration with inline styles and CSS
133- Setting chart dimensions with width and height properties
134- Pixel sizing for fixed dimensions
135- Percentage sizing for responsive behavior relative to container
136- Default size behavior (126px height, window width)
137- Complete examples for container and direct sizing
138
139### Customization Options
140📄 **Read:** [references/customization.md](references/customization.md)
141- Orientation with orientation property (Horizontal, Vertical)
142- Default Horizontal orientation
143- Right-to-left (RTL) support with enableRtl property
144- Animation configuration with animation property (duration, delay)
145- Linear animation for actual and target bars
146- Theme support with theme property
147- Available Syncfusion themes
148- Complete examples for each customization
149
150### Accessibility
151📄 **Read:** [references/accessibility.md](references/accessibility.md)
152- Accessibility compliance (ADA, Section 508, WCAG 2.2)
153- Accessibility features table with compatibility status
154- WAI-ARIA attributes and patterns (img role, button role, aria-label, aria-pressed)
155- Keyboard interaction support (Tab, Shift+Tab, Ctrl+P)
156- Screen reader support
157- Right-to-left (RTL) support for internationalization
158- Color contrast compliance
159- Mobile device support
160- Testing with accessibility-checker and axe-core tools
161- Sample accessibility demo reference
162
163## Quick Start Example
164
165```tsx
166import { BulletChartComponent, BulletRangeCollectionDirective, BulletRangeDirective, BulletTooltip, Inject } from '@syncfusion/ej2-react-charts';
167
168function App() {
169 const data = [
170 { value: 270, target: 250 }
171 ];
172
173 return (
174 <BulletChartComponent
175 id="bulletChart"
176 dataSource={data}
177 valueField="value"
178 targetField="target"
179 title="Revenue"
180 minimum={0}
181 maximum={300}
182 interval={50}
183 tooltip={{ enable: true }}
184 >
185 <BulletRangeCollectionDirective>
186 <BulletRangeDirective end={150} color="red" />
187 <BulletRangeDirective end={250} color="yellow" />
188 <BulletRangeDirective end={300} color="green" />
189 </BulletRangeCollectionDirective>
190 <Inject services={[BulletTooltip]} />
191 </BulletChartComponent>
192 );
193}
194```
195
196## Common Patterns
197
198### Performance Dashboard with Multiple Metrics
199Display multiple bullet charts vertically to show various KPIs:
200```tsx
201const metrics = [
202 { value: 270, target: 250, category: 'Revenue' },
203 { value: 85, target: 100, category: 'Profit' },
204 { value: 180, target: 150, category: 'Sales' }
205];
206
207// Map each metric to a separate BulletChartComponent with categoryField
208```
209
210### Dynamic Color from Data
211Bind colors directly from your data source:
212```tsx
213const data = [
214 { value: 270, target: 250, valueColor: '#5B5FC7', targetColor: '#646464' }
215];
216
217<BulletChartComponent
218 dataSource={data}
219 valueFill="valueColor"
220 targetColor="targetColor"
221/>
222```
223
224### Custom Tooltip Template
225Show formatted values with custom HTML:
226```tsx
227<BulletChartComponent
228 tooltip={{
229 enable: true,
230 template: '<div><b>Actual:</b> ${value}<br/><b>Target:</b> ${target}</div>'
231 }}
232/>
233```
234
235### Responsive Layout
236Use percentage-based sizing for responsive dashboards:
237```tsx
238<BulletChartComponent
239 width="100%"
240 height="80px"
241/>
242```
243
244## Key Props
245
246| Property | Type | Purpose |
247|----------|------|---------|
248| `dataSource` | Array | Data collection for the chart |
249| `valueField` | string | Field name for actual/feature measure |
250| `targetField` | string | Field name for target/comparative measure |
251| `minimum` | number | Minimum value of quantitative scale |
252| `maximum` | number | Maximum value of quantitative scale |
253| `interval` | number | Interval between axis labels |
254| `title` | string | Chart title text |
255| `subtitle` | string | Chart subtitle text |
256| `type` | string | Value bar shape: 'Rect' or 'Dot' |
257| `targetTypes` | string[] | Target bar shapes: 'Circle', 'Cross', 'Rect' |
258| `orientation` | string | Chart orientation: 'Horizontal' or 'Vertical' |
259| `width` | string | Chart width (pixels or percentage) |
260| `height` | string | Chart height (pixels or percentage) |
261| `enableRtl` | boolean | Enable right-to-left rendering |
262| `theme` | string | Apply Syncfusion theme |
263| `tooltip` | object | Tooltip configuration with enable, template, fill, border, textStyle |
264| `dataLabel` | object | Data label configuration with enable, labelStyle |
265
266## Common Use Cases
267
268### KPI Dashboard
269Use bullet charts to display multiple performance indicators:
270- Set different targets for each metric
271- Use red/yellow/green ranges for performance levels
272- Add category labels for metric names
273- Enable tooltips for detailed information
274
275### Sales Performance Tracker
276Compare actual sales against targets:
277- Map revenue data to valueField
278- Set quarterly/monthly targets in targetField
279- Configure ranges for underperforming/meeting/exceeding targets
280- Use data labels to show exact values
281
282### Progress Indicators
283Show progress toward goals with visual context:
284- Use percentage-based ranges (0-50%, 50-75%, 75-100%)
285- Customize colors to match brand guidelines
286- Add animations for engaging transitions
287- Position titles on the left for compact layout
288
289### Comparative Analysis
290Compare multiple items side-by-side:
291- Use vertical orientation for space efficiency
292- Set consistent scale across all charts
293- Apply category labels for clear identification
294- Customize target types (Circle, Cross) for distinction
295
296### Mobile Dashboards
297Create responsive, touch-friendly visualizations:
298- Use percentage-based dimensions
299- Increase touch target sizes for bars
300- Enable mobile-optimized tooltips
301- Test with accessibility tools for screen readers
302
303## Edge Cases and Troubleshooting
304
305**Data not displaying:**
306- Verify valueField and targetField match data source property names
307- Check that dataSource is an array with valid objects
308- Ensure minimum/maximum encompass your data range
309
310**Ranges not visible:**
311- Import BulletRangeCollectionDirective and BulletRangeDirective from @syncfusion/ej2-react-charts
312- Set end values in ascending order
313- Verify end values are within minimum/maximum bounds
314
315**Tooltips not working:**
316- Inject BulletTooltip module: `<Inject services={[BulletTooltip]} />`
317- Set tooltip.enable to true
318- Check that tooltip object is properly configured
319
320**Title/subtitle overlapping:**
321- Adjust titlePosition to Left, Right, Top, or Bottom
322- Increase chart dimensions (width/height)
323- Customize titleStyle and subtitleStyle font sizes
324
325**Axis labels cut off:**
326- Increase chart width or height
327- Adjust label format to shorter notation (e.g., 'n1' instead of full numbers)
328- Use enableGroupSeparator for better readability
329
330## Implementation Checklist
331
332- [ ] Install @syncfusion/ej2-react-charts package
333- [ ] Import BulletChartComponent and directives
334- [ ] Prepare data with value and target fields
335- [ ] Configure dataSource, valueField, targetField
336- [ ] Set minimum, maximum, and interval for scale
337- [ ] Add ranges using BulletRangeCollectionDirective
338- [ ] Configure title and subtitle if needed
339- [ ] Enable and customize tooltip (inject BulletTooltip)
340- [ ] Test with different data ranges
341- [ ] Verify accessibility with keyboard navigation
342- [ ] Test responsive behavior with different screen sizes