跳到内容
+

图表 - 条形图

条形图通过条形的长度来表达数量,使用一个共同的基线。

基础知识

条形图系列应包含一个 data 属性,其中包含一个数值数组。

您可以使用 xAxis 自定义条形刻度。此轴可能具有 scaleType='band',并且其 data 应与您的系列具有相同的长度。

- MUI 组件库group Agroup Bgroup C0246
Enter 开始编辑

使用数据集

如果您的数据存储在对象数组中,则可以使用 dataset 辅助属性。它接受对象数组,例如 dataset={[{x: 1, y: 32}, {x: 2, y: 41}, ...]}

定义系列和轴时,您可以借助 dataKey 属性重用此数据。

例如 xAxis={[{ dataKey: 'x'}]}series={[{ dataKey: 'y'}]}

- MUI 组件库JanFebMarAprMayJuneJulyAugSeptOctNovDec0100200300400rainfall (mm)
Enter 开始编辑

条形大小

您可以使用 categoryGapRatiobarGapRatio 属性定义条形的尺寸。

categoryGapRatio 定义两个类别之间的间隙。该比率是通过将间隙大小除以类别大小(条形图使用的空间)获得的。

barGapRatio 定义同一类别的两个条形之间的间隙。它是间隙大小除以条形大小。因此,值为 1 将导致条形之间的间隙等于条形宽度。值为 -1 将使条形彼此重叠。

- MUI 组件库2020202120222023$ 0B$ 10B$ 20B$ 30B$ 40B$ 50B
import { BarChart } from '@mui/x-charts/BarChart';

<BarChart
  // ...
  xAxis={[
    {
      scaleType: 'band'
      data: ['Page 1', 'Page 2', 'Page 3']
      categoryGapRatio: 0.3
      barGapRatio: 0.1
    }
/>

Playground


堆叠

每个条形图系列都可以获得一个 stack 属性,该属性期望一个字符串值。具有相同 stack 的系列将彼此堆叠。

- MUI 组件库2020202120222023010,000,00020,000,00030,000,00040,000,00050,000,000
Enter 开始编辑

堆叠策略

您可以使用 stackOffsetstackOrder 属性来定义系列的堆叠方式。

默认情况下,它们按照您定义的顺序堆叠,正值堆叠在 0 以上,负值堆叠在 0 以下。

有关更多信息,请参阅堆叠文档

布局

条形方向

通过提供 layout="horizontal" 属性,可以水平布局渲染条形图。如果您正在使用组合,则应将属性 layout: 'horizontal' 设置为每个条形图系列对象。

- MUI 组件库050100150200250300350rainfall (mm)JanFebMarAprMayJuneJulyAugSeptOctNovDec
Enter 开始编辑

刻度线位置

当使用 "band" 比例时,轴具有一些关于刻度线位置的附加自定义属性。

  • tickPlacement 用于刻度线的位置
  • tickLabelPlacement 用于与刻度线关联的标签的位置

您可以在以下演示中测试所有配置选项

Enter 开始编辑

网格

您可以使用 grid 属性在图表的背景中添加网格。

有关更多信息,请参阅轴 - 网格文档。

- MUI 组件库050100150200250300350rainfall (mm)JanFebMarAprMayJuneJulyAugSeptOctNovDec
Enter 开始编辑

颜色比例

与其他图表一样,您可以直接或使用调色板修改系列颜色

您还可以通过使用轴 colorMap 来修改颜色,该属性将值映射到颜色。条形图按优先级使用

  1. 值轴颜色
  2. 带状轴颜色
  3. 系列颜色

样式文档中了解有关 colorMap 属性的更多信息。

<ScatterChart
  /* ... */
  xAxis={[{
    colorMap: {
      type: 'piecewise',
      thresholds: [new Date(2021, 1, 1), new Date(2023, 1, 1)],
      colors: ['blue', 'red', 'blue'],
    }
  }]}
  yAxis={[{}]}
/>

边框半径

要为条形图提供圆角,您可以更改 BarChart 上的 borderRadius 属性的值。

它适用于任何正值,并正确应用于水平布局、堆叠和负值。

边框半径

<BarChart
  /* ... */
  borderRadius={10}
/>

标签

您可以在条形图上显示标签。为此,BarChartBarPlot 接受 barLabel 属性。它可以获取一个函数,该函数获取条形项目和一些上下文。或者您可以传递 'value' 以显示条形的原始值。

- MUI 组件库435163256group Agroup Bgroup C0246
Enter 开始编辑

自定义标签

您可以根据条件逻辑显示、更改或隐藏标签。为此,请为 barLabel 提供一个函数。如果该函数返回 null,则不显示标签。

在示例中,我们在高于 10 的值上显示 'High' 文本,并在生成的条形高度低于 60px 时隐藏值。

- MUI 组件库4548High65890123402468101214
Enter 开始编辑

点击事件

条形图提供两个点击处理程序

  • onItemClick 用于点击特定条形。
  • onAxisClick 用于点击图表中的任何位置

它们都提供以下签名。

const clickHandler = (
  event, // The mouse event.
  params, // An object that identifies the clicked elements.
) => {};

点击图表

// Data from item click
// The data will appear here

// Data from axis click
// The data will appear here

组合

如果您正在使用组合,您可以按如下方式获取这些点击事件。请注意,如果您混合使用条形图和折线图,则 onAxisClick 将同时处理两者。

import ChartsOnAxisClickHandler from '@mui/x-charts/ChartsOnAxisClickHandler';
// ...

<ChartContainer>
  {/* ... */}
  <ChartsOnAxisClickHandler onAxisClick={onAxisClick} />
  <BarPlot onItemClick={onItemClick} />
</ChartContainer>;

动画

要跳过图表创建和更新时的动画,您可以使用 skipAnimation 属性。当设置为 true 时,它会跳过由 @react-spring/web 驱动的动画。

图表容器已经使用来自 @react-spring/webuseReducedMotion 来跳过动画,根据用户偏好

// For a single component chart
<BarChart skipAnimation />

// For a composed chart
<ResponsiveChartContainer>
  <BarPlot skipAnimation />
</ResponsiveChartContainer>

项目数量

系列数量

API

请参阅下面的文档,以获得此处提及的组件的所有可用属性和类的完整参考。