You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MUI X Gauge组件referenceArc渐变填充及半径设置问题

解决MUI X Gauge的referenceArc渐变填充与半径自定义问题

一、实现referenceArc的渐变填充

MUI X Gauge的referenceArc是SVG路径元素,要实现渐变填充需要先定义SVG渐变,再将渐变引用赋值给它的fill属性:

  1. 在Gauge外层添加SVG渐变定义
import { Gauge, gaugeClasses } from '@mui/x-charts/Gauge';

// ...

<svg width={gwidth} height={58}>
  <defs>
    {/* 定义线性渐变,可根据需求调整方向和颜色 */}
    <linearGradient id="refArcGradient" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%" stopColor="#f7fcfe" />
      <stop offset="100%" stopColor="#d1ecf1" />
    </linearGradient>
  </defs>
  <Gauge 
    width={gwidth} 
    height={58} 
    value={score} 
    valueMax={100} 
    startAngle={-90} 
    endAngle={90} 
    innerRadius="70%" 
    cornerRadius={5}
    sx={(theme) => ({
      [`& .${gaugeClasses.valueText}`]: {
        fontSize: 20,
        transform: 'translate(0px,-13px)'
      },
      [`& .${gaugeClasses.valueArc}`]: {
        fill: range
      },
      [`& .${gaugeClasses.referenceArc}`]: {
        // 引用定义好的渐变
        fill: 'url(#refArcGradient)',
      },
    })}
  />
</svg>

二、自定义referenceArc的radius和innerRadius

MUI X Gauge默认没有单独暴露referenceArc的半径控制props,最可靠的方式是叠加两个Gauge组件:一个作为自定义样式的referenceArc,另一个作为显示数值的主Gauge:

import { Box } from '@mui/material';
import { Gauge, gaugeClasses } from '@mui/x-charts/Gauge';

// ...

<Box position="relative" width={gwidth} height={58}>
  {/* 底层:作为自定义referenceArc的Gauge */}
  <Gauge
    width={gwidth}
    height={58}
    value={100} // 设置为最大值,显示完整的弧
    valueMax={100}
    startAngle={-90}
    endAngle={90}
    innerRadius="65%" // 自定义referenceArc的内半径
    radius="85%" // 自定义referenceArc的外半径
    cornerRadius={5}
    sx={{
      [`& .${gaugeClasses.valueArc}`]: {
        // 这里用渐变填充,也可以用纯色
        fill: 'url(#refArcGradient)',
      },
      // 隐藏底层Gauge的数值文本
      [`& .${gaugeClasses.valueText}`]: {
        display: 'none',
      },
    }}
  />
  {/* 上层:显示数值的主Gauge */}
  <Gauge
    position="absolute"
    top={0}
    left={0}
    width={gwidth}
    height={58}
    value={score}
    valueMax={100}
    startAngle={-90}
    endAngle={90}
    innerRadius="70%" // 主Gauge的内半径
    cornerRadius={5}
    sx={(theme) => ({
      [`& .${gaugeClasses.valueText}`]: {
        fontSize: 20,
        transform: 'translate(0px,-13px)'
      },
      [`& .${gaugeClasses.valueArc}`]: {
        fill: range
      },
      // 隐藏主Gauge默认的referenceArc
      [`& .${gaugeClasses.referenceArc}`]: {
        display: 'none',
      },
    })}
  />
</Box>

这种方式可以完全独立控制两个弧的半径、填充样式,避免了直接修改SVG路径的复杂性。

内容的提问来源于stack exchange,提问作者wcpulling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:04:51