【问题标题】:How to show value of each bar in react-chartjs-2如何在 react-chartjs-2 中显示每个条的值
【发布时间】:2018-03-09 09:07:59
【问题描述】:

我对 react-chartjs-2 中的条形图有疑问。我在我的应用程序中使用 react-chartjs-2 制作了条形图和饼图。

我可以使用 plugin 调用 Chart.PieceLabel.js 来显示饼图的值。但我找不到条形图的插件。 我想将每个条形的值显示为与饼图相同。

是否可以对条形图中的每个条进行赋值?

当前视图是这样的。在饼图中,会出现每个切片的值。

这是我的代码

export default class Categories extends React.Component{
constructor(props){
    super(props);
    this.state = {
        slideOpen : false,
        piData : piData
      }

this.handleClick = this.handleClick.bind(this);
this.update = this.update.bind(this);
this.doParentToggle = this.doParentToggle.bind(this);
}

doParentToggle(){


this.setState({
    piData : piData
  })
  this.update();
  }

handleClick(){
    this.setState({
        slideOpen : !this.state.slideOpen
    })
    }

update() {
  var piData;
  this.setState({
    piData : piData
  })
}    

  componentDidMount() {
    let ctx = this.refs.chart.chart_instance.chart.ctx;
    console.log(this.refs.chart.chart_instance.chart.ctx); // returns a Chart.js instance reference
    this.refs.chart.chart_instance.chart.config.data.datasets.forEach(function (dataset) {
                if(dataset.type === 'bar'){
                    const dataArray = dataset.data;
                    dataset._meta[0].data.forEach(function (bar, index) {
                        ctx.fillText(dataArray[index], bar._view.x, bar._view.y);
                    });
                };
            })
  }

render(){


 const CategoriesPanel = this.state.slideOpen? "slideOpen" : "";
 const { length } = this.props


  var totalData = piData + piData2 + piData3 + piData4 + piData5;

   let newpiData =  function() {
   return parseFloat((piData /  totalData ) * 100 ).toFixed(2) };

   let newpiData2 =  function() {
   return parseFloat((piData2 /  totalData ) * 100).toFixed(2) };

   let newpiData3 =  function() {
   return  parseFloat((piData3 /  totalData ) * 100).toFixed(2) };

   let newpiData4 =  function() {
   return parseFloat((piData4 /  totalData ) * 100).toFixed(2) };

   let newpiData5 =  function() {
   return parseFloat((piData5 /  totalData ) * 100).toFixed(2) };

  const data = {
  datasets: [{
    data: [ newpiData() , newpiData2(), newpiData3(), newpiData4(), newpiData5()],
    backgroundColor: [
    'orange',
    'blue',
    'red',
    'purple',
    'green'
    ],
    borderColor: [ 
    'orange',
    'blue',
    'red',
    'purple',
    'green'
    ]
  }]};

  var pieOptions = {
      pieceLabel: {
     render: function (args) {
              return args.value + '%';
            },
     fontSize: 40,
     fontColor: '#fff'
   }
  };

  const bardata = {
  labels: ['1', '2', '3', '4', '5'],
  datasets: [
   {
  backgroundColor: [
    'orange',
    'blue',
    'red',
    'purple',
    'green'
    ],
  borderColor: 'black',
  borderWidth: 3,
  hoverBackgroundColor: 'rgba(255,99,132,0.4)',
  hoverBorderColor: 'rgba(255,99,132,1)',
  data: [ piData , piData, piData , piData , piData ]
  }
  ]
  };

  return(
<div>
<div id="chart" className={CategoriesPanel}>
<div style={{"display" : "flex"}}>
<Pie style={{"fontSize" : "20px" }} data={data} options={pieOptions}/>
<HorizontalBar
      ref='chart'
      data={bardata}
      width={100}
      height={50}
      options={{
        maintainAspectRatio: false
      }}
    />
  </div>
 </div>
<div className="categoriesSlide" onClick={this.handleClick}>{this.state.slideOpen? <img src={Arrowup} alt="arrowup" className="arrowup" /> : <img src={Arrowdown} alt="arrowdown" className="arrowdown"/>}</div>
 <div className="clear">
 <List parentToggle={this.doParentToggle} />
 <ListSecond parentToggle={this.doParentToggle} />
 <ListThird parentToggle={this.doParentToggle} />
 <ListFourth parentToggle={this.doParentToggle} />
 <ListFifth parentToggle={this.doParentToggle} />

 </div>
 </div>
    )
}
}

感谢您的帮助,感谢您花时间阅读我的问题。

【问题讨论】:

标签: reactjs charts bar-chart react-chartjs


【解决方案1】:

要在每个柱上显示数据值,您可以使用名为:chartjs-plugin-datalabels的插件

安装(通过 npm)

npm install chartjs-plugin-datalabels --save

导入(在组件中)

import 'chartjs-plugin-datalabels';

选项(显示价值)

plugins: {
   datalabels: {
      display: true,
      color: 'white'
   }
}

* 在图表选项中添加此项

查看datalables插件here的所有可用选项。

【讨论】:

  • 抱歉回复晚了。您是 chart.js 专家。感谢您的帮助。
  • 我能再问你一个问题吗?值仅在数据更新时显示。默认情况下,不显示任何数据。有办法解决吗?
  • 不确定您遇到了什么......也许可以发布一个包含更多详细信息的新问题。
  • 谢谢。我发布了另一个问题。如果我能得到您的见解,那就太好了。
  • 谢谢!花了我很长时间才找到正确的声明方式!
【解决方案2】:

如果您将它用于 React 应用程序,则在您的主 index.js 文件中导入“chartjs-plugin-datalabels”。这将自动将数据标签添加到所有图表。为了从特定图表中删除不需要的数据标签,请将以下内容添加到相应的选项对象中:

options = { plugins: { datalabels: { display: false }}}

【讨论】:

    【解决方案3】:

    首先安装chartjs-plugin-datalabels

    npm install chartjs-plugin-datalabels --save
    

    然后导入它和 Chart.js

    import Chart from 'chart.js';
    import ChartDataLabels from 'chartjs-plugin-datalabels';
    

    那就注册吧

    const MyFunction = () => {
       Chart.plugins.register(ChartDataLabels);
    ...
    }
    

    最后在options中使用

     options: {
      plugins: {
        datalabels: {
          color: '#36A2EB'
        }
      }
    }
    

    您可以在website找到此信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多