Кликабельные точки данных диаграммы для открытия новых страниц - PullRequest
0 голосов
/ 04 ноября 2019

Я бы хотел иметь возможность нажимать на панели и напрямую открывать новую страницу, связанную с этой панелью.

Я исследовал и смог сделать клик по оси x, но вместо этого мне нужны клики и полосы.

var chart = c3.generate({
  bindto: '#chart',
  data: {
    columns: [
      ['data1', 30, 200, 100, 400, 150, 250],
      ['data2', 50, 20, 10, 40, 15, 25]
    ],
    type: 'bar'
  },
  axis: {
    rotated: true
  }
});

var arrayOfLinks = [
  "http://google.com",
  "http://google.com",
  "http://google.com",
  "http://google.com",
  "http://google.com",
  "http://google.com",
];

d3.selectAll('.c3-axis-x .tick tspan')
  .each(function(d, i) {
    // augment tick contents with link
    var self = d3.select(this);
    var text = self.text();
    self.html("<A xlink:href='" + arrayOfLinks[i] + "'>" + text + "</A>");
  });
<link href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.11/c3.min.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.11/c3.min.js"></script>
<div id="chart"></div>

Я почти уверен, что исправление заключается в следующей строке кода:

d3.selectAll('.c3-axis-x .tick tspan')

Каким должен быть аргумент? 'data.coloums[1]','bar'?

Пожалуйста, пролите немного света.

1 Ответ

2 голосов
/ 04 ноября 2019

Как указано здесь в выпуске, для гистограмм можно указать функцию onclick при передаче данных. Эта функция может инициировать четную window.open ссылку.

Здесь приведен фрагмент кода:

var chart = c3.generate({
  bindto: '#chart',
  data: {
    columns: [
      ['data1', 30, 200, 100, 400, 150, 250],
      ['data2', 50, 20, 10, 40, 15, 25]
    ],
    type: 'bar',
    //define the onclick function
    onclick: function (d) { 
      console.log(d) //checks the data
      //note that the index for the values gets passed as d.x
      window.open(arrayOfLinks[d.x]); 
    },
  },
  axis: {
    rotated: true
  },

});

Полный рабочий блок для кода здесь:

http://bl.ocks.org/akulmehta/87f4903a4686deb8285381b8e816ce4d

...