MUI X Gauge组件referenceArc渐变填充及半径设置问题
解决MUI X Gauge的referenceArc渐变填充与半径自定义问题
一、实现referenceArc的渐变填充
MUI X Gauge的referenceArc是SVG路径元素,要实现渐变填充需要先定义SVG渐变,再将渐变引用赋值给它的fill属性:
- 在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
相关产品推荐
相关产品推荐

