Chart.js 条形图

条形图提供了一种将数据值显示为垂直条的方式。 它有时用于显示趋势数据,以及并排比较多个数据集。

chartjs 条形图

const labels = Utils.months({count: 7});
const data = {
  labels: labels,
  datasets: [{
    label: 'My First Dataset',
    data: [65, 59, 80, 81, 56, 55, 40],
    backgroundColor: [
      'rgba(255, 99, 132, 0.2)',
      'rgba(255, 159, 64, 0.2)',
      'rgba(255, 205, 86, 0.2)',
      'rgba(75, 192, 192, 0.2)',
      'rgba(54, 162, 235, 0.2)',
      'rgba(153, 102, 255, 0.2)',
      'rgba(201, 203, 207, 0.2)'
    ],
    borderColor: [
      'rgb(255, 99, 132)',
      'rgb(255, 159, 64)',
      'rgb(255, 205, 86)',
      'rgb(75, 192, 192)',
      'rgb(54, 162, 235)',
      'rgb(153, 102, 255)',
      'rgb(201, 203, 207)'
    ],
    borderWidth: 1
  }]
};
const config = {
  type: 'bar',
  data: data,
  options: {
    scales: {
      y: {
        beginAtZero: true
      }
    }
  },
};

数据集属性

命名空间:

  • data.datasets[index] - 仅适用于该数据集的选项
  • options.datasets.bar - 所有条形数据集的选项
  • options.elements.bar - 所有条形元素的选项
  • options - 整个图表的选项

条形图允许为每个数据集指定许多属性。 这些用于设置特定数据集的显示属性。 例如,条形图的颜色一般都是这样设置的。 只需在数据集命名空间中指定数据选项。

名称 类型 可编写脚本 可索引 默认值
backgroundColor Color Yes Yes 'rgba(0, 0, 0, 0.1)'
base number Yes Yes
barPercentage number - - 0.9
barThickness number string - -
borderColor Color Yes Yes 'rgba(0, 0, 0, 0.1)'
borderSkipped string Yes Yes 'start'
borderWidth number object Yes Yes
borderRadius number object Yes Yes
categoryPercentage number - - 0.8
clip number object - -
data object object[] number[] string[]
grouped boolean - - true
hoverBackgroundColor Color Yes Yes
hoverBorderColor Color Yes Yes
hoverBorderWidth number Yes Yes 1
hoverBorderRadius number Yes Yes 0
indexAxis string - - 'x'
inflateAmount number 'auto' Yes Yes
maxBarThickness number - -
minBarLength number - -
label string - - ''
order number - - 0
pointStyle pointStyle Yes - 'circle'
skipNull boolean - -
stack string - - 'bar'
xAxisID string - - 第一个 x 轴
yAxisID string - - 第一个 y 轴

所有这些值,如果未定义,则回退到选项解析中描述的范围

data: {
    datasets: [{
        barPercentage: 0.5,
        barThickness: 6,
        maxBarThickness: 8,
        minBarLength: 2,
        data: [10, 20, 30, 40, 50, 60, 70]
    }]
};

一般的

名称 描述
base 沿值轴以数据单位表示的条形基值。 如果未设置,则默认为值轴基值。
clip 如何相对于 chartArea 进行剪辑。 正值允许溢出,负值在chartArea 内剪辑许多像素。 0 = 在图表区域剪辑。 剪裁也可以每边配置:clip:{left:5,top:false,right:-2,bottom:0}
grouped 条形图是否应在索引轴上分组。 当为 true 时,具有相同索引值的所有数据集将以该索引值为中心彼此相邻放置。 当为 false 时,每根柱线都放置在其实际的索引轴值上。
indexAxis 数据集的基轴。 'x' 用于垂直条,'y' 用于水平条。
label 出现在图例和工具提示中的数据集标签。
order 数据集的绘制顺序。 还会影响堆叠、工具提示和图例的顺序。 更多的
skipNull 如果为 true,则在确定条形尺寸时将不会使用空值或未定义值进行间距计算。
stack 此数据集所属的组的 ID(堆叠时,每个组将是一个单独的堆叠)。
xAxisID 绘制此数据集的 x 轴的 ID。
yAxisID 绘制此数据集的 y 轴的 ID。

Styling

名称 描述
backgroundColor 条形图背景颜色。
borderColor 条形图边框颜色。
borderSkipped 绘制线条时要跳过的边缘。
borderWidth 条形边框宽度(以像素为单位)。
borderRadius 条形边框半径(以像素为单位)。
minBarLength 设置此项以确保条具有最小长度(以像素为单位)。
pointStyle 图例点的样式。

所有这些值,如果未定义,则回退到关联的 elements.bar.* 选项。

borderSkipped

此设置用于避免在填充底部绘制条形描边,或禁用边框半径。 通常,这不需要更改,除非创建从条形图派生的图表类型。

对于垂直图表中的负条,顶部和底部被翻转。 水平图表中的左侧和右侧也是如此。

  • 'start'
  • 'end'
  • 'middle' (仅对堆叠条有效:条之间的边界被跳过)
  • 'bottom'
  • 'left'
  • 'top'
  • 'right'
  • false

borderWidth

如果此值是一个数字,它将应用于矩形的所有边(左、上、右、下),除了 borderSkipped 。 如果此值是一个对象,则 left 属性定义左边框宽度。 同样,也可以指定 right、top 和 bottom 属性。 省略边框和borderSkipped 被跳过。

borderRadius

如果此值是一个数字,它将应用于矩形的所有角(topLeft、topRight、bottomLeft、bottomRight),除了与 borderSkipped 接触的角。 如果此值是一个对象,topLeft 属性定义左上角边框半径。 同样,也可以指定 topRight、bottomLeft 和 bottomRight 属性。 省略的角和那些触及边界的角被跳过。 例如,如果顶部边框被跳过,那么角 topLeft 和 topRight 的边框半径也将被跳过。

当边界半径以数字形式提供并且图表被堆叠时,半径将仅应用于位于堆栈边缘的条形或条形浮动的地方。 对象语法可用于覆盖此行为。

inflateAmount

此选项可用于膨胀用于绘制条形的矩形。 这可用于在 barPercentage(#barpercentage) * categoryPercentage(#categorypercentage) 为 1 时隐藏条形之间的伪影。默认值“auto”在大多数情况下应该有效。

交互

可以使用以下属性控制与每个条的交互:

名称 描述
hoverBackgroundColor 悬停时的栏背景颜色。
hoverBorderColor 悬停时的条形边框颜色。
hoverBorderWidth 悬停时的条形边框宽度(以像素为单位)。
hoverBorderRadius 悬停时的条形边框半径(以像素为单位)。

所有这些值,如果未定义,则回退到关联的 elements.bar.* 选项。

barPercentage

每个条的可用宽度的百分比 (0-1) 应在类别宽度内。 1.0 将采用整个类别宽度并将条形放在彼此旁边。

categoryPercentage

每个类别的可用宽度的百分比 (0-1) 应在样本宽度内。

barThickness

如果此值是一个数字,则将其应用于每个条的宽度,以像素为单位。 强制执行此操作时,barPercentage 和 categoryPercentage 将被忽略。

如果设置为“flex”,则基本样本宽度会根据之前和之后的样本自动计算,以便它们采用完整的可用宽度而不会重叠。 然后,使用 barPercentage 和 categoryPercentage 调整条形图的大小。 当百分比选项为 1 时没有间隙。当数据不均匀分布时,此模式会生成不同宽度的条形图。

如果未设置(默认),则使用防止条重叠的最小间隔计算基本样本宽度,并使用 barPercentage 和 categoryPercentage 调整条的大小。 此模式始终生成大小相同的条形图。

maxBarThickness

设置此项以确保条的尺寸不会比这更厚。


Scale 配置

条形图从关联的比例选项中为以下配置设置唯一的默认值:

名称 类型 默认值 描述
offset boolean true 如果为 true,则会在两条边上添加额外的空间,并缩放轴以适合图表区域。
grid.offset boolean true 如果为 true,则特定数据点的条形图位于网格线之间。 网格线将向左移动刻度间隔的一半。 如果为 false,则网格线将在条形中间向下。
options = {
    scales: {
        x: {
            grid: {
              offset: true
            }
        }
    }
};

偏移网格线

如果为真,则特定数据点的条形图位于网格线之间。 网格线将向左移动刻度间隔的一半,即网格线之间的空间。 如果为 false,则网格线将在条形中间向下。 对于条形图中的类别比例,默认设置为 true,而对于其他比例或图表类型,默认设置为 false。


默认选项

通常希望将配置设置应用于所有创建的条形图。 全局条形图设置存储在 Chart.overrides.bar 中。 更改全局选项只会影响更改后创建的图表。 现有图表未更改。


barPercentage vs categoryPercentage

下面显示了条形百分比选项和类别百分比选项之间的关系。

// categoryPercentage: 1.0
// barPercentage: 1.0
Bar:        | 1.0 | 1.0 |
Category:   |    1.0    |
Sample:     |===========|

// categoryPercentage: 1.0
// barPercentage: 0.5
Bar:          |.5|  |.5|
Category:  |      1.0     |
Sample:    |==============|

// categoryPercentage: 0.5
// barPercentage: 1.0
Bar:             |1.0||1.0|
Category:        |   .5   |
Sample:     |==================|

堆积条形图

通过更改 X 和 Y 轴上的设置以启用堆叠,可以将条形图配置为堆叠条形图。 堆积条形图可用于显示一个数据系列是如何由许多较小的部分组成的。

const stackedBar = new Chart(ctx, {
    type: 'bar',
    data: data,
    options: {
        scales: {
            x: {
                stacked: true
            },
            y: {
                stacked: true
            }
        }
    }
});

水平条形图

水平条形图是垂直条形图的变体。 它有时用于显示趋势数据,以及并排比较多个数据集。 为此,我们必须将选项对象中的 indexAxis 属性设置为“y”。 此属性的默认值为“x”,因此将显示垂直条。

chartjs 水平条形图

const labels = Utils.months({count: 7});
const data = {
  labels: labels,
  datasets: [{
    axis: 'y',
    label: 'My First Dataset',
    data: [65, 59, 80, 81, 56, 55, 40],
    fill: false,
    backgroundColor: [
      'rgba(255, 99, 132, 0.2)',
      'rgba(255, 159, 64, 0.2)',
      'rgba(255, 205, 86, 0.2)',
      'rgba(75, 192, 192, 0.2)',
      'rgba(54, 162, 235, 0.2)',
      'rgba(153, 102, 255, 0.2)',
      'rgba(201, 203, 207, 0.2)'
    ],
    borderColor: [
      'rgb(255, 99, 132)',
      'rgb(255, 159, 64)',
      'rgb(255, 205, 86)',
      'rgb(75, 192, 192)',
      'rgb(54, 162, 235)',
      'rgb(153, 102, 255)',
      'rgb(201, 203, 207)'
    ],
    borderWidth: 1
  }]
};
const config = {
  type: 'bar',
  data,
  options: {
    indexAxis: 'y',
  }
};

水平条形图配置选项

水平条形图的配置选项与条形图相同。 但是,在条形图中 x 轴上指定的任何选项都将应用于水平条形图中的 y 轴。


内部数据格式

{x, y, _custom}_custom 是定义堆叠条形属性的可选对象:{start, end, barStart, barEnd, min, max} 。 start 和 end 是输入值。 这两个在 barStart(靠近原点)、barEnd(远离原点)、minmax 中重复。

查看笔记

扫码一下
查看教程更方便