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