跳到主要内容
+

图表 - 坐标轴

坐标轴将值与元素位置关联起来。

坐标轴用于以下图表: <LineChart /><BarChart /><ScatterChart />

定义坐标轴

如同您的数据一样,坐标轴定义在图表渲染中起着核心作用。它负责数据和元素位置之间的映射。

您可以使用 xAxisyAxis 属性定义自定义坐标轴。这些属性接受对象数组。

这是一个演示,展示了两条具有相同数据的折线。但一条使用线性坐标轴,另一条使用对数坐标轴。每个坐标轴定义都由其 id 属性标识。然后,每个系列使用 xAxisIdyAxisId 属性指定它们使用的坐标轴。

Enter 开始编辑

坐标轴类型

坐标轴类型由其 scaleType 属性指定,该属性接受以下值之一

  • 'band':将坐标轴分割成相等的条带。主要用于柱状图。
  • 'point':将坐标轴分割成等距的点。主要用于类别折线图。
  • 'linear''log''sqrt':将数值映射到图表可用的空间。 'linear' 是默认行为。
  • 'time''utc':将 JavaScript Date() 对象映射到图表可用的空间。

坐标轴数据

坐标轴定义对象还包括一个 data 属性。该属性接受与 scaleType 一致的值数组

  • 对于 'linear''log''sqrt',它应包含数值
  • 对于 'time''utc',它应包含 Date() 对象
  • 对于 'band''point',它可以包含 string 或数值

某些系列类型还需要特定的坐标轴属性

  • 折线图需要 xAxis 提供 data
  • 柱状图需要 xAxis 具有 scaleType='band' 并提供一些 data

坐标轴格式化器

坐标轴数据可以显示在坐标轴刻度和工具提示中。要修改数据的显示方式,请使用 valueFormatter 属性。

valueFormatter 的第二个参数为高级用例提供了一些渲染上下文。

在下一个演示中,valueFormatter 用于缩短月份并仅为刻度引入换行符。为了区分刻度和工具提示,它使用了 context.location

Enter 开始编辑

坐标轴子域

默认情况下,坐标轴域的计算方式是使您的所有数据都可见。要显示特定的值范围,您可以为坐标轴定义提供 min 和/或 max 属性。

xAxis={[
  {
    min: 10,
    max: 50,
  },
]}

相对坐标轴子域

您可以使用 domainLimit 选项相对于其数据调整坐标轴范围。它可以接受 3 个不同的值

  • "nice" 将域四舍五入为人类友好的值。这是默认行为。
  • "strict" 将域设置为要显示的最小值/最大值。
  • (minValue, maxValue) => { min, max } 接收计算出的极值作为参数,并应返回坐标轴域。

下面的演示展示了设置 y 轴范围的不同方法。它们始终显示从 -15 到 92 的相同数据,但具有不同的 domainLimit 设置。

坐标轴方向

默认情况下,坐标轴的方向是从左到右和从下到上。您可以使用 reverse 属性更改此行为。

网格

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

它接受一个具有 verticalhorizontal 属性的对象。将这些属性设置为 true 将显示网格线。

如果您使用组合,则可以将这些属性传递给 <ChartsGrid /> 组件。

<BarChart grid={{ vertical: true }}>

<ChartContainer>
  <ChartsGrid vertical >
</ChartContainer>
Enter 开始编辑

刻度位置

自动刻度位置

您可以使用 tickNumber 属性自定义刻度数。

作为辅助工具,您还可以提供 tickMinSteptickMaxStep,它们将计算 tickNumber,以使两个刻度之间的步长符合这些最小值/最大值。

这里,顶部轴的 tickMinStep 为半天,底部轴的 tickMinStep 为整天。

Enter 开始编辑

固定刻度位置

如果您想更精确地控制刻度位置,可以使用 tickInterval 属性。

此属性接受值数组。刻度将放置在这些值处。

对于刻度类型为 'point' 的轴,tickInterval 属性可以是类型为 (value, index) => boolean 的过滤函数。

在下一个演示中,两个轴的 scaleType 均为 'point'。顶部轴显示默认行为。它为每个点显示一个刻度。底部轴使用过滤函数仅在一天开始时显示一个刻度。

Enter 开始编辑

过滤刻度标签

您可以使用 tickLabelInterval 属性仅在部分刻度上显示标签。它是一个 (value, index) => boolean 形式的过滤函数。

例如,tickLabelInterval: (value, index) => index % 2 === 0 将每隔两个刻度显示一个标签。

默认情况下,刻度经过过滤,以使其标签不重叠。您可以使用 tickLabelInterval: () => true 覆盖此行为,这将强制显示每个刻度的刻度标签。

在此示例中,顶部轴是默认行为的参考。请注意,刻度标签不会溢出。

在底部,您可以看到一天开始和中间各有一个刻度,但刻度标签仅在一天开始时显示。

坐标轴自定义

除了坐标轴定义之外,您还可以进一步自定义坐标轴渲染。

解决溢出问题

如果您的刻度标签太长,它们可能会溢出 SVG 或与坐标轴标签重叠。可以通过两种方式解决此问题

  • 通过设置 margin 属性,增加 SVG 边框和坐标轴之间的空间。
  • 通过以下方式修改坐标轴标签位置
    • 使用坐标轴配置 labelStyle.transform
    • 将 CSS 转换应用于类名 axisClasses.label

在以下演示中,修改了 margin 以为 x 轴和 y 轴提供更多空间。x 轴标签的位置基于坐标轴配置,y 轴的位置使用 CSS 选择器。

位置

图表组件提供 4 个属性:topAxisrightAxisbottomAxisleftAxis,允许定义图表的 4 个坐标轴。这些属性可以接受三种类型的值

  • null 不显示坐标轴
  • string 应对应于顶部和底部的 xAxis 的 ID。或对应于左侧和右侧的 yAxis 的 ID。
  • object 将作为属性传递给 <XAxis /><YAxis />。它允许使用 axisId 属性指定应表示哪个坐标轴,并自定义坐标轴的设计。

下面的演示使用 leftAxis={null} 删除左侧坐标轴,并使用 rightAxis={{}} 设置右侧坐标轴,而无需覆盖默认的 y 轴配置。

Enter 开始编辑

隐藏坐标轴

要隐藏坐标轴,请将其设置为 null。例如,leftAxis={null} 隐藏左侧坐标轴。

- MUI 组件库ABCDE
Enter 开始编辑

渲染

坐标轴渲染可以进一步自定义。以下是坐标轴属性的交互式演示。

import { ScatterChart } from '@mui/x-charts/ScatterChart';

<ScatterChart
  {/** ... */}
  bottomAxis={{
    label: "my axis",
  }}
/>

演示场


文本自定义

要自定义文本元素(刻度标签和坐标轴标签),请使用坐标轴配置的 tickLabelStylelabelStyle 属性。

import { ScatterChart } from '@mui/x-charts/ScatterChart';

<ScatterChart
  {/** ... */}
  bottomAxis={{
    labelStyle: {
      fontSize: 14,
      transform: `translateY(${
            // Hack that should be added in the lib latter.
            5 * Math.abs(Math.sin((Math.PI * props.angle) / 180))
          }px)`
    },
    tickLabelStyle: {
      angle: 45,
      textAnchor: 'start',
      fontSize: 12,
    },
  }}
/>

演示场


组合

如果您正在使用组合,则必须通过使用 xAxisyAxis 属性在 <ChartContainer /> 中提供坐标轴设置。

它将为其子组件提供所有缩放属性,并允许您将 <XAxis/><YAxis/> 组件用作子组件。这些组件需要 axisId 属性才能将它们链接到您在 <ChartContainer /> 中定义的坐标轴。

您可以使用 position 属性选择它们的位置,该属性接受 <XAxis />'top'/'bottom'<YAxis />'left'/'right'。其他属性与上一节中定义的属性相似。

参考线

<ChartsReferenceLine /> 组件向图表添加参考线。您可以提供 xy 属性以分别在此值处获得垂直线或水平线。

您可以为此参考线添加 label。可以使用 labelAlign 属性放置标签,该属性接受 'start''middle''end' 值。可以使用 lineStylelabelStyle 属性设置元素样式。

Enter 开始编辑

API

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