reactjs - react 车速表或仪表。如何在 react 中创建标记的速度计?

标签 reactjs charts gauge

我使用这个库来绘制速度计。 https://github.com/palerdot/react-d3-speedometer 我想在每个段上设置标签。如果有其他库可以绘制这样的图表,请帮忙。 enter image description here

最佳答案

根据该问题的答案,这是不可行的:Is it possible to set label on segments

目前,标签是根据 maxValue、'minValue' 和段自动计算的。这可能根本不可能,根据库功能,您的图表将有 5 个值,而不是您提到的 4 个。恐怕据我所知这是根本不可能的。所以我要关闭这个问题。

有很多库可以绘制图表,但每个库都有其局限性,对于我的项目,我最终自己实现了图表,这并不难,可以让您准确地完成您需要的操作,而不会遇到怪癖。

这是我从 ReactPie component 中提取的一些代码,它绘制了一个 PieSegment,因此您可以使用它轻松创建与仪表类似的结果。你可以用那支笔试试:https://codepen.io/leefsmp/pen/dJjpXx

class ReactPieSegment extends React.Component {

    constructor (props) {

      super (props)
    }

    generatePathDef(centre, rIn, rOut, start, delta) {

      const endRad = start + delta

      const startOut = {
        x: centre.x + rOut * Math.cos(start),
        y: centre.y + rOut * Math.sin(start)
      }

      const endOut = {
        x: centre.x + rOut * Math.cos(endRad),
        y: centre.y + rOut * Math.sin(endRad)
      }

      const startIn = {
        x: centre.x + rIn * Math.cos(endRad),
        y: centre.y + rIn * Math.sin(endRad)
      };

      var endIn = {
        x: centre.x + rIn * Math.cos(start),
        y: centre.y + rIn * Math.sin(start)
      }

      const largeArc = delta > Math.PI ? 1 : 0

      return (
        `M${startOut.x},${startOut.y}` +
        ` A${rOut},${rOut} 0 ` +
        `${largeArc},1 ${endOut.x},${endOut.y}` +
        ` L${startIn.x},${startIn.y}` +
        ` A${rIn},${rIn} 0 ` +
        `${largeArc},0 ${endIn.x},${endIn.y}` +
        ` L${startOut.x},${startOut.y} Z`
      )
    }

    render () {

      const {
        fillColor, strokeColor,
        start, delta,
        rIn, rOut,
        centre
      } = this.props

      const pathDef = this.generatePathDef(
        centre, rIn, rOut, start, delta)

      const labelDist = rIn + 1.2 * (rOut-rIn)

      const labelRad = start + 0.5 * delta

      const labelPos = {
        x: centre.x + labelDist * Math.cos (labelRad) - 10,
        y: centre.y + labelDist * Math.sin (labelRad)
      }

      const labelStyle = {
        transform: `translate(${labelPos.x}px, ${labelPos.y}px)`
      }

      return (
        <g className='react-pie-segment'>
          <path
            stroke={strokeColor}
            fill={fillColor}
            d={pathDef}
          />
          <text style={labelStyle}>
            {this.props.label}
          </text>
        </g>
      )
    }
  }


  class Demo extends React.Component {

    constructor (props) {
      super (props)
    }

    render() {
      return (
        <div className="demo">
          <svg>
          <ReactPieSegment
            centre={{x:150, y:150}}
            strokeColor={"green"}
            fillColor={"green"}
            delta={Math.PI/4}
            start={Math.PI}
            label={"label 1"}
            rOut={90}
            rIn={50}
          />
          <ReactPieSegment
            centre={{x:150, y:150}}
            strokeColor={"yellow"}
            fillColor={"yellow"}
            delta={Math.PI/4}
            start={5*Math.PI/4}
            label={"label 2"}
            rOut={90}
            rIn={50}
          /> 
          <ReactPieSegment
            centre={{x:150, y:150}}
            strokeColor={"orange"}
            fillColor={"orange"}
            delta={Math.PI/4}
            start={6*Math.PI/4}
            label={"label 3"}
            rOut={90}
            rIn={50}
          /> 
          <ReactPieSegment
            centre={{x:150, y:150}}
            strokeColor={"red"}
            fillColor={"red"}
            delta={Math.PI/4}
            start={7*Math.PI/4}
            label={"label 4"}
            rOut={90}
            rIn={50}
          /> 
          </svg>  
        </div>
      )
    }
  }

  const root = document.getElementById('root')

  ReactDOM.render(<Demo/>, root)  

enter image description here

关于reactjs - react 车速表或仪表。如何在 react 中创建标记的速度计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48247525/

相关文章:

javascript - 在 Chart.js 中的条形顶部显示值

javascript - 使用 Chart.js 显示图表

delphi - 带定时器的循环 TGauge

java - 如何获得 'unit test view' 进行仪表测试?

jsf - org.primefaces.component.chart.renderer.MeterGaugeRenderer.encodeData 中的 java.lang.NullPointerException

javascript - React 中的 useEffect 在更新存储后不更新组件

javascript - 将对象作为链接中的参数传递

jquery float 图表显示工作日

reactjs - React-native 和 React-Redux 在不同版本的 React 上存在冲突

javascript - 登录时从用户集合中获取用户数据