【问题标题】:Adding text to the center of pie chart: Highcharts将文本添加到饼图的中心:Highcharts
【发布时间】:2021-03-18 11:22:15
【问题描述】:

如何将总值添加到饼图的中心。我尝试了以下方法。基本上应该显示y值的总和。

输入

export const data = [
  {
    y: 15,
    name: "Category 1"
  },
  {
    y: 25,
    name: "Category 2"
  },
  {
    y: 35,
    name: "Category 3"
  },

];

这里应该在饼图的中心显示 75。 (即 y 值的总数) 沙盒:https://codesandbox.io/s/react-line-chart-forked-edqfb?file=/src/LineChart.js

import * as React from "react";
import Highcharts from "highcharts";
import HighchartsReact from "highcharts-react-official";
import HC_exporting from "highcharts/modules/exporting";
HC_exporting(Highcharts);

function Chart(props) {
  const chartOptions = {
    chart: {
      type: "pie",
      height: 250
    },
    title: {
      verticalAlign: "middle",
      floating: true,
      text: "test"
    },
    legend: {
      layout: "vertical",
      align: "right",
      verticalAlign: "top",
      itemMarginTop: 5,
      itemMarginBottom: 5
    },
    plotOptions: {
      pie: {
        allowPointSelect: true,
        cursor: "pointer",
        dataLabels: {
          enabled: false
        },
        showInLegend: true
      }
    },
    series: [
      {
        data: props.chartData,
        size: "80%",
        innerSize: "50%,",
        text: "Test"
      }
    ]
  };
  return <HighchartsReact highcharts={Highcharts} options={chartOptions} />;
}

export default Chart;

【问题讨论】:

    标签: javascript reactjs highcharts react-highcharts


    【解决方案1】:

    使用Highcharts.SVGRenderer 类并在计算的位置添加一个文本元素。示例:

        chart: {
            ...,
            events: {
                render: function() {
                    var series = this.series[0],
                        seriesCenter = series.center,
                        x = seriesCenter[0] + this.plotLeft,
                        y = seriesCenter[1] + this.plotTop,
                        text = 'Total: ' + series.total,
                        fontMetrics = this.renderer.fontMetrics(16);
    
                    if (!this.customTitle) {
                        this.customTitle = this.renderer.text(
                                text,
                                null,
                                null,
                                true
                            )
                            .css({
                                transform: 'translate(-50%)',
                                fontSize: '16px',
                                color: 'red'
                            })
                            .add();
                    }
    
                    this.customTitle.attr({
                        x,
                        y: y + fontMetrics.f / 2
                    });
                }
            }
        }
    

    现场演示: http://jsfiddle.net/BlackLabel/mrg2qt6c/

    API 参考: https://api.highcharts.com/class-reference/Highcharts.SVGRenderer#text

    【讨论】:

    • 我们可以给这个 SVGRenderer 传递一个 css 类吗?因为我需要在明暗模式的颜色之间切换?
    • 是的,您可以使用addClass 方法。示例:jsfiddle.net/BlackLabel/bxzqojs6
    • 嗨@li97,你能详细解释一下这个问题吗?
    • 在您的代码的帮助下,我能够将文本置于中心位置。现在我想根据某些过滤器值动态更改此文本。说,我有不同的过滤器返回不同的数据点集,在我的情况下,文本保持不变。它不会在过滤器更改时重新加载。可以使用任何重绘或更新吗?
    • 感谢您的信息!在这里:jsfiddle.net/BlackLabel/srjowdfc 你可以找到一个更新的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多