Highcharts:文氏图显示工会的总人数?

bsxbgnwa  于 2023-10-20  发布在  Highcharts
关注(0)|答案(1)|浏览(110)

我正在使用highchart.js生成报告。我需要生成像下面这样的维恩图。

上面的维恩图显示了集合及其值和集合的交集。我想得到每个集合的交集值的总和(例如445 + 138 = 583)。我没有任何工作的例子....帮助达到上述要求。

zbsbpyhn

zbsbpyhn1#

要创建一个基本的Highcharts VENN图,并将重叠部分作为示例,您必须执行以下操作(JSFiddle example):

Highcharts.chart('container', {
    series: [{
        type: 'venn',
        dataLabels: {
          formatter: function () {
            return this.point.value;
        }
      },
        data: [{
            sets: ['A'],
            value:583
        }, {
            sets: ['B'],
            value: 231
        }, {
            sets: ['A', 'B'],
            value: 138,
        }]
    }],
    tooltip: false,
    title: false
});

与示例中显示的值相比,缺少的元素是每个“切片”具有的值,例如。445和93。
下面的示例显示如何使用每个点集从重叠点中减去值以获得切片的值。这里,“S”表示切片值(例如,445和93),而“V”表示整个圆的值(例如,583和231):

Highcharts.chart('container', {
    series: [{
        type: 'venn',
        dataLabels: {
          formatter: function () {
          const value = this.point.value;
          const slice = this.series.points.reduce((p, a) => {
            if(a === this.point) {
              return p;
            }
            else if(this.point.sets.every(s => a.sets.includes(s))) {
              return p - a.value;
            }
            return p;
          }, value);
          
          if(value === slice) {
            return `V/S: ${value}`;
          }
          else {
            return `S: ${slice} | V: ${value}`;
          }
        }
      },
        data: [{
            sets: ['A'],
            value:583
        }, {
            sets: ['B'],
            value: 231
        }, {
            sets: ['A', 'B'],
            value: 138,
                  name: 'C'
        }]
    }],
    tooltip: false,
    title: {
        text: 'Showing name, value (V) and slice value (S)'
    }
});

参见this JSFiddle example。它并不解决文本本身的放置问题,而是提供所请求的值。
这段代码并不是在所有情况下都能工作,特别是如果你有多个点重叠在同一段上,那么你可能会减去太多。您必须调整格式化程序来解决这个问题,如this JSFiddle example所示。

相关问题