【问题标题】:Change bar color when a bar is clicked plotly-react.js单击条时更改条颜色 plotly-react.js
【发布时间】:2019-03-26 21:43:15
【问题描述】:

我已经使用plotly-react.js 实现了barchart。我想在单击栏以突出显示单击的栏时更改栏颜色。

render() {

    return (
      <div>
        <Plot
          data={this.prepData(timelineData)}
          name='process duration'
          onClick={(data) => console.log('> Plotly click: ', data)}
          type= {'bar'}
          layout={{ width: '1130', height: 650, xaxis: {rangeslider: {}} }}
        />
      </div>
    );
}

prepData(timelineData) {
    var x=[];
    var y=[];

    timelineData.forEach(function(datum,i) {
      x.push(moment.unix(datum.endTime).format('DD MMM'));
      y.push(datum.duration);
    });
    return [{
      type: 'bar',
      x:x,
      y:y,
    }];
  }

当单击特定条时,我需要在哪里添加逻辑来更改条的颜色?

【问题讨论】:

    标签: reactjs plotly


    【解决方案1】:

    是的,您可以在 plotlyjs 中单击时突出显示该栏。您需要在数据对象中提供标记属性。

    代码sn-p:

    const Plot = createPlotlyComponent(Plotly);
    const mountNode = document.getElementById("root")
    colors =['#00000','#00000','#00000']
    
    class PlotlyBarComponent extends React.Component {
      state = {
        colors: ['#00000','#00000','#00000'],
      }
      render() {
        return (
           <Plot
        data={[
            {
              type: "bar",
              x: [1, 2, 3],
              y: [2, 5, 3],
              marker:{size:16, color:this.state.colors}
            }
          ]}
          layout={{
            width: 640,
            height: 480,
            title: "A Fancy Plot"
          }}
        onClick={(data) => {
           console.log("data", data)
          var pn='',
          tn='',
          colors=[];
      for(var i=0; i < data.points.length; i++){
        pn = data.points[i].pointNumber;
        tn = data.points[i].curveNumber;
        colors = data.points[i].data.marker.color;
      };
      colors[pn] = '#C54C82';
      this.setState({
        colors: [...colors]
      })
        }}
       />
        )
      }
    }
    ReactDOM.render(
      <PlotlyBarComponent />,
         document.getElementById("root")
    );
    

    Codepen link

    【讨论】:

    • 当我点击不同的栏时,是否有可能之前的栏颜色变回黑色。基本上一次只有一个条是粉红色的?
    • 我已经更新了codepen的代码。给你,享受哥们
    • 在您介绍的这种情况下,数组长度是已知的,并且仅为 3。如果数据长度很大/动态,您最初将如何将颜色(在这种情况下为黑色)分配给每个条形在图表中?
    • this.state = { colors:[], currentColorsArray: [] } 你会在哪里循环数据并分配颜色[i]='#000'
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2022-10-01
    • 1970-01-01
    • 2015-11-24
    • 2023-03-12
    相关资源
    最近更新 更多