BarChart API
API reference docs for the React BarChart component. Learn about the props, CSS, and other APIs of this exported module.
Demos
Import
import { BarChart } from '@mui/x-charts/BarChart';
// or
import { BarChart } from '@mui/x-charts';
// or
import { BarChart } from '@mui/x-charts-pro';
Learn about the difference by reading this guide on minimizing bundle size.
Props of the native component are also available.
Name | Type | Default | Description |
---|---|---|---|
series* | Array<object> | - | The series to display in the bar chart. An array of BarSeriesType objects. |
axisHighlight | { x?: 'band' | 'line' | 'none', y?: 'band' | 'line' | 'none' } | - | The configuration of axes highlight. Default is set to 'band' in the bar direction. Depends on See highlighting docs for more details. |
barLabel | 'value' | func | - | If provided, the function will be used to format the label of the bar. It can be set to 'value' to display the current value. |
borderRadius | number | - | Defines the border radius of the bar element. |
colors | Array<string> | func | rainbowSurgePalette | Color palette used to colorize multiple series. |
dataset | Array<object> | - | An array of objects that can be used to populate series and axes data using their |
disableAxisListener | bool | false | If |
grid | { horizontal?: bool, vertical?: bool } | - | Option to display a cartesian grid in the background. |
height | number | - | The height of the chart in px. If not defined, it takes the height of the parent element. |
hideLegend | bool | - | If |
highlightedAxis | Array<{ axisId: number | string, dataIndex: number }> | - | The controlled axis highlight. Identified by the axis id, and data index. |
highlightedItem | { dataIndex?: number, seriesId: number | string } | - | The highlighted item. Used when the highlight is controlled. |
id | string | - | This prop is used to help implement the accessibility logic. If you don't provide this prop. It falls back to a randomly generated id. |
layout | 'horizontal' | 'vertical' | 'vertical' | The direction of the bar elements. |
loading | bool | false | If |
localeText | object | - | Localized text for chart components. |
margin | number | { bottom?: number, left?: number, right?: number, top?: number } | - | The margin between the SVG and the drawing area. It's used for leaving some space for extra information such as the x- and y-axis or legend. |
onAxisClick | func | - | The function called for onClick events. The second argument contains information about all line/bar elements at the current mouse position. Signature: function(event: MouseEvent, data: null | ChartsAxisData) => void
|
onHighlightChange | func | - | The callback fired when the highlighted item changes. Signature: function(highlightedItem: HighlightItemData | null) => void
|
onHighlightedAxisChange | func | - | The function called when the pointer position corresponds to a new axis data item. This update can either be caused by a pointer movement, or an axis update. In case of multiple axes, the function is called if at least one axis is updated. The argument contains the identifier for all axes with a Signature: function(axisItems: Array
|
onItemClick | func | - | Callback fired when a bar item is clicked. Signature: function(event: React.MouseEvent
|
showToolbar | bool | false | If true, shows the default chart toolbar. |
skipAnimation | bool | - | If |
slotProps | object | {} | The props used for each component slot. |
slots | object | {} | Overridable component slots. See Slots API below for more details. |
width | number | - | The width of the chart in px. If not defined, it takes the width of the parent element. |
xAxis | Array<{ axis?: 'x', barGapRatio?: number, categoryGapRatio?: number, classes?: object, colorMap?: { colors: Array<string>, type: 'ordinal', unknownColor?: string, values?: Array<Date | number | string> } | { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, height?: number, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'bottom' | 'none' | 'top', reverse?: bool, scaleType?: 'band', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelMinGap?: number, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func } | { axis?: 'x', classes?: object, colorMap?: { colors: Array<string>, type: 'ordinal', unknownColor?: string, values?: Array<Date | number | string> } | { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, height?: number, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'bottom' | 'none' | 'top', reverse?: bool, scaleType?: 'point', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelMinGap?: number, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func } | { axis?: 'x', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, height?: number, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'bottom' | 'none' | 'top', reverse?: bool, scaleType?: 'log', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelMinGap?: number, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func } | { axis?: 'x', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, height?: number, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'bottom' | 'none' | 'top', reverse?: bool, scaleType?: 'pow', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelMinGap?: number, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func } | { axis?: 'x', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, height?: number, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'bottom' | 'none' | 'top', reverse?: bool, scaleType?: 'sqrt', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelMinGap?: number, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func } | { axis?: 'x', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, height?: number, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'bottom' | 'none' | 'top', reverse?: bool, scaleType?: 'time', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelMinGap?: number, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func } | { axis?: 'x', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, height?: number, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'bottom' | 'none' | 'top', reverse?: bool, scaleType?: 'utc', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelMinGap?: number, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func } | { axis?: 'x', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, height?: number, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'bottom' | 'none' | 'top', reverse?: bool, scaleType?: 'linear', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelMinGap?: number, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func }> | - | The configuration of the x-axes. If not provided, a default axis config is used. An array of AxisConfig objects. |
yAxis | Array<{ axis?: 'y', barGapRatio?: number, categoryGapRatio?: number, classes?: object, colorMap?: { colors: Array<string>, type: 'ordinal', unknownColor?: string, values?: Array<Date | number | string> } | { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'left' | 'none' | 'right', reverse?: bool, scaleType?: 'band', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func, width?: number } | { axis?: 'y', classes?: object, colorMap?: { colors: Array<string>, type: 'ordinal', unknownColor?: string, values?: Array<Date | number | string> } | { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'left' | 'none' | 'right', reverse?: bool, scaleType?: 'point', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func, width?: number } | { axis?: 'y', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'left' | 'none' | 'right', reverse?: bool, scaleType?: 'log', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func, width?: number } | { axis?: 'y', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'left' | 'none' | 'right', reverse?: bool, scaleType?: 'pow', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func, width?: number } | { axis?: 'y', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'left' | 'none' | 'right', reverse?: bool, scaleType?: 'sqrt', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func, width?: number } | { axis?: 'y', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'left' | 'none' | 'right', reverse?: bool, scaleType?: 'time', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func, width?: number } | { axis?: 'y', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'left' | 'none' | 'right', reverse?: bool, scaleType?: 'utc', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func, width?: number } | { axis?: 'y', classes?: object, colorMap?: { color: Array<string> | func, max?: Date | number, min?: Date | number, type: 'continuous' } | { colors: Array<string>, thresholds: Array<Date | number>, type: 'piecewise' }, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, domainLimit?: 'nice' | 'strict' | func, fill?: string, hideTooltip?: bool, id?: number | string, ignoreTooltip?: bool, label?: string, labelStyle?: object, max?: Date | number, min?: Date | number, offset?: number, position?: 'left' | 'none' | 'right', reverse?: bool, scaleType?: 'linear', slotProps?: object, slots?: object, stroke?: string, sx?: Array<func | object | bool> | func | object, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelPlacement?: 'middle' | 'tick', tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickPlacement?: 'end' | 'extremities' | 'middle' | 'start', tickSize?: number, valueFormatter?: func, width?: number }> | - | The configuration of the y-axes. If not provided, a default axis config is used. An array of AxisConfig objects. |
ref
is forwarded to the root element.Slot name | Class name | Default component | Description |
---|---|---|---|
axisLabel | ChartsText | Custom component for axis label. | |
axisLine | 'line' | Custom component for the axis main line. | |
axisTick | 'line' | Custom component for the axis tick. | |
axisTickLabel | ChartsText | Custom component for tick label. | |
bar | BarElementPath | The component that renders the bar. | |
barLabel | BarLabel | The component that renders the bar label. | |
baseButton | |||
baseIconButton | |||
legend | ChartsLegend | Custom rendering of the legend. | |
loadingOverlay | ChartsLoadingOverlay | Overlay component rendered when the chart is in a loading state. | |
noDataOverlay | ChartsNoDataOverlay | Overlay component rendered when the chart has no data to display. | |
toolbar | ChartsToolbar | Custom component for the toolbar. | |
tooltip | ChartsTooltipRoot | Custom component for the tooltip popper. |
Source code
If you did not find the information in this page, consider having a look at the implementation of the component for more detail.