Select Sankey 的 Google 图表 API 上未触发事件

Select event not fired on Google chart API for Sankey

我正在尝试将事件与单击 Google Sankey 图挂钩。 Events 声称包含 select 但它不会在 Chrome 或 Safari 上触发。 onmouseover/onmouseout/ready 如果在下面的代码中切换了事件,似乎会被连接起来——我在控制台日志中得到了一些东西。即切换线路:

google.visualization.events.addListener(chart, 'select', selectHandler);

google.visualization.events.addListener(chart, 'onmouseover', selectHandler);

显示事件侦听器已连接。

我已经在其他较新的图表类型(如单词树)上尝试过此操作,并且 select 已连接。我错过了什么?

例如

<html>
<head>
<script type='text/javascript' src='https://www.google.com/jsapi'</script>   
<script type='text/javascript'>

google.load('visualization', '1.1', {packages:['sankey']});
google.setOnLoadCallback(drawChart);      
function drawChart() {
    var data = new google.visualization.DataTable();
        data.addColumn('string', 'A');
        data.addColumn('string', 'B');
        data.addColumn('number', 'Mails');
        data.addRows([
            ['from elvis','frank', 285],
            ['frank', 'to wendy', 61],
        ]);
   var options = {width: 600};
   var chart = new google.visualization.Sankey(document.getElementById('thechart'));        

google.visualization.events.addListener(chart, 'select', selectHandler);

function selectHandler() {
    console.log('You selected ' + JSON.stringify(chart.getSelection()));
};

chart.draw(data, options);  
} 
</script>
</head>
<body>
<div id='thechart' style='width: 600px; height: 300px;'></div>  
</body>
</html>

我认为这里的问题是您正在为 returns 一个对象的 Sankey 图表事件使用 getSelection 方法。该对象包含您单击的图表中的节点,但您需要以正确的方式查询该对象以提取此信息。我认为不可能像上面问题中尝试的那样在一行中做事。

当我遇到同样的问题时,这对我有用:

google.visualization.events.addListener(chart, 'select', function(){
var selection = chart.getSelection();
for(var key in selection) {
        var value = selection[key];
    console.log(value.name);    
    }   
alert('you selected '+value.name);
});

您必须设置正确的选项:

 // Sets chart options.
 var options = {
        width: 600,
        sankey: {
            node: {
                interactivity: true
            }
        }
    };

我用了这个例子https://jsfiddle.net/5mvx6bdr/ 工作完美:)

sankey: 节点:交互性默认设置为 false。

最上面的答案不适合我。 但是,将 link interactivity 设置为 true 就可以了。

var options = {
 sankey: {
   node: {
    interactivity: true,
    colors: this.colors
   },
   link: {
    interactivity: true
   }
  }
}