Bar Chart

Simple static & beautifully designed bar charts

Basic Chart
Jan
Dec

Installation

npx shadcn@latest add @evilcharts/bar-chart

Usage

import { EvilBarChart } from "@/components/evilcharts/charts/bar-chart";
<EvilBarChart  
  xDataKey="month"
  barVariant="default"
  stackType="default"
  data={data} 
  chartConfig={chartConfig}
/>

Interactive Selection

When isClickable is enabled, you can use the onSelectionChange callback to handle selection events:

<EvilBarChart
  data={data}
  chartConfig={chartConfig}
  isClickable={true}
  onSelectionChange={(selectedDataKey) => {
    if (selectedDataKey) {
      console.log("Selected:", selectedDataKey);
    } else {
      console.log("Deselected");
    }
  }}
/>

Loading State

isLoading='true'
Loading

Buffer Bar

enableBufferBar='true'

Examples

Below are some examples of the bar chart with different variants. You can customize the barVariant, stackType, and other properties.

Hover Highlight

enableHoverHighlight={true}

Gradient Colors

gradient colors

Bar Variants

barVariant='default'
barVariant='hatched'
barVariant='duotone'
barVariant='duotone-reverse'
barVariant='gradient'
barVariant='stripped'

Stack Types

stackType='stacked'
stackType='percent'

Horizontal Layout

layout='horizontal'

Glowing Bars

glowingBars={['desktop']} - gradient colors
glowingBars={['mobile']} - solid colors

API Reference

dataRequired

Data used to display the chart. An array of objects where each object represents a data point.

type: TData[] where TData extends Record<string, unknown>

chartConfigRequired

Configuration object that defines the chart's series. Each key should match a data key in your data array, with a corresponding color or color array.

type: Record<string, ChartConfig[string]>

xDataKey

The key from your data objects to use for the X-axis values.

type: keyof TData & string

yDataKey

The key from your data objects to use for the Y-axis values.

type: keyof TData & string

className

Additional CSS classes to apply to the chart container.

type: string

barVariant

The visual style variant for the bars.

type: "default" | "hatched" | "duotone" | "duotone-reverse" | "gradient" | "stripped"

default: "default"

stackType

Controls how multiple bars are stacked. "default" renders bars side by side, "stacked" stacks them on top of each other, and "percent" shows percentage distribution.

type: "default" | "stacked" | "percent"

default: "default"

layout

The orientation of the bars. "vertical" displays bars vertically (default), "horizontal" displays bars horizontally.

type: "vertical" | "horizontal"

default: "vertical"

barRadius

The border radius of the bars in pixels.

type: number

default: 2

barGap

The gap between bars in the same category (when using multiple series).

type: number

barCategoryGap

The gap between different categories of bars.

type: number

tickGap

Minimum gap in pixels between axis ticks.

type: number

default: 8

hideTooltip

Whether to hide the tooltip on hover.

type: boolean

default: false

tooltipRoundness

Controls the border-radius of the tooltip.

type: "sm" | "md" | "lg" | "xl"

default: "lg"

tooltipVariant

Controls the visual style of the tooltip.

type: "default" | "frosted-glass"

default: "default"

tooltipDefaultIndex

When set, the tooltip will be visible by default at the specified data point index.

type: number

hideCartesianGrid

Whether to hide the background grid lines.

type: boolean

default: false

backgroundVariant

Background pattern variant to display behind the chart. When set, the Cartesian grid is automatically hidden.

type: BackgroundVariant

legendVariant

The visual style variant for the legend indicators.

type: "square" | "circle" | "circle-outline" | "rounded-square" | "rounded-square-outline" | "vertical-bar" | "horizontal-bar"

hideLegend

Whether to hide the chart legend.

type: boolean

default: false

isClickable

Enables interactive clicking on bars to select/deselect them. When a bar is selected, unselected bars become semi-transparent.

type: boolean

default: false

defaultSelectedDataKey

The data key that should be selected by default when isClickable is enabled.

type: string | null

default: null

onSelectionChange

Callback function that is called when a bar is selected or deselected. Receives the selected data key as a parameter, or null when deselected.

Note: This prop is only available when isClickable is set to true.

type: (selectedDataKey: string | null) => void

enableHoverHighlight

When enabled, hovering over a bar dims all other bars, making it easier to focus on specific data points.

type: boolean

default: false

isLoading

Shows a loading skeleton animation with shimmer effect when data is being fetched.

type: boolean

default: false

loadingBars

Number of bars to display in the loading skeleton.

type: number

showBrush

When enabled, displays a brush control below the chart for selecting and zooming into a range of data.

type: boolean

default: false

brushHeight

The height of the brush preview area in pixels.

type: number

brushFormatLabel

Custom formatter for the brush axis labels.

type: (value: unknown, index: number) => string

onBrushChange

Callback invoked when the user changes the brush selection range.

type: (range: EvilBrushRange) => void

enableBufferBar

When enabled, renders the last data point's bars with a diagonal lines (hatched) pattern while the rest stay solid. Useful for indicating projected or incomplete data at the end of a series.

type: boolean

default: false

glowingBars

Array of data keys that should have a glowing effect applied. Creates a smooth outer glow around the specified bars.

type: NumericDataKeys<TData>[] (array of keys where the value is a number)

default: []

chartProps

Additional props to pass to the underlying Recharts BarChart component.

type: ComponentProps<typeof BarChart>

Read the Recharts BarChart documentation for available props.

xAxisProps

Additional props to pass to the Recharts XAxis component.

type: ComponentProps<typeof XAxis>

Read the Recharts XAxis documentation for available props.

yAxisProps

Additional props to pass to the Recharts YAxis component.

type: ComponentProps<typeof YAxis>

Read the Recharts YAxis documentation for available props.