气泡图(气泡之间的关系)

时间:2017-11-16 09:35:39

标签: javascript highcharts

请告诉我,是否有可能在气泡之间建立关系(从一个气泡到另一个气泡的线)?

Example:
SE->FL->NL
FL->DE
SE->BE->DE
DE->NL

演示: http://jsfiddle.net/2pLog7fw/

2 个答案:

答案 0 :(得分:0)

当然,可以做到。创建线条的一种方法是将泡泡系列的lineWidth设置为大于零。

现场演示http://jsfiddle.net/kkulig/2d7u7orx/

但这只会在一个系列中创建一个关系(从第一个点到最后一个)。

此解决方案是为每个关系创建一个新的分散系列:

  {
    data: [
      [80.3, 86.1],
      [80.8, 91.5],
      [80.4, 102.5]
    ], // SE -> FI -> NL
    type: 'scatter'
  },  {
    data: [
      [86.5, 102.9],
      [80.4, 102.5]
    ], // DE -> NL
    type: 'scatter'
  }

所有分散系列的配置(plotOptions):

scatter: {
  lineWidth: 1, // show the line
  marker: {
    radius: 0
  }
}

现场演示http://jsfiddle.net/kkulig/x8r6uj5q/

如果您想要一个显示关系方向的箭头,您可以使用此演示中的代码:http://jsfiddle.net/kkulig/mLsbzgnp/

答案 1 :(得分:0)

这是我的问题的正确答案:

"您可以使用分散系列来连接气泡" https://github.com/highcharts/highcharts/issues/7410

示例

Highcharts.chart('container', {

  chart: {
    type: 'bubble',
    plotBorderWidth: 1,
    zoomType: 'xy'
  },

  legend: {
    enabled: false
  },

  title: {
    text: 'Sugar and fat intake per country'
  },

  subtitle: {
    text: 'Source: <a href="http://www.euromonitor.com/">Euromonitor</a> and <a href="https://data.oecd.org/">OECD</a>'
  },

  xAxis: {
    gridLineWidth: 1,
    title: {
      text: 'Daily fat intake'
    },
    labels: {
      format: '{value} gr'
    },
    plotLines: [{
      color: 'black',
      dashStyle: 'dot',
      width: 2,
      value: 65,
      label: {
        rotation: 0,
        y: 15,
        style: {
          fontStyle: 'italic'
        },
        text: 'Safe fat intake 65g/day'
      },
      zIndex: 3
    }]
  },

  yAxis: {
    startOnTick: false,
    endOnTick: false,
    title: {
      text: 'Daily sugar intake'
    },
    labels: {
      format: '{value} gr'
    },
    maxPadding: 0.2,
    plotLines: [{
      color: 'black',
      dashStyle: 'dot',
      width: 2,
      value: 50,
      label: {
        align: 'right',
        style: {
          fontStyle: 'italic'
        },
        text: 'Safe sugar intake 50g/day',
        x: -10
      },
      zIndex: 3
    }]
  },

  tooltip: {
    useHTML: true,
    headerFormat: '<table>',
    pointFormat: '<tr><th colspan="2"><h3>{point.country}</h3></th></tr>' +
      '<tr><th>Fat intake:</th><td>{point.x}g</td></tr>' +
      '<tr><th>Sugar intake:</th><td>{point.y}g</td></tr>' +
      '<tr><th>Obesity (adults):</th><td>{point.z}%</td></tr>',
    footerFormat: '</table>',
    followPointer: true
  },

  plotOptions: {
    series: {
      dataLabels: {
        enabled: true,
        format: '{point.name}'
      }
    }
  },

  series: [{
    data: [{
      x: 95,
      y: 95,
      z: 15.8,
      name: 'BE',
      country: 'Belgium'
    }, {
      x: 86.5,
      y: 102.9,
      z: 16,
      name: 'DE',
      country: 'Germany'
    }, {
      x: 80.8,
      y: 91.5,
      z: 15.8,
      name: 'FI',
      country: 'Finland'
    }, {
      x: 80.4,
      y: 102.5,
      z: 16,
      name: 'NL',
      country: 'Netherlands'
    }, {
      x: 80.3,
      y: 86.1,
      z: 18.8,
      name: 'SE',
      country: 'Sweden'
    }]
  }, {
    type: 'scatter',
    lineWidth: 1,
    enableMouseTracking: false,
        data: [
        [95, 95], [86.5, 102.9],
      [86.5, null],
      [86.5, 102.9], [80.4, 102.5],
      [86.5, null],
      [86.5, 102.9], [80.3, 86.1]
    ]
  }]

});

现场演示: http://jsfiddle.net/2pLog7fw/1/