0

我从我的数据中创建了一个 Series 对象,如下所示: 在此处输入图像描述

但我不知道如何实际实现 Series 对象来缩放和绑定数据,这是我的代码:

function render(svg) {
  //   const xValue = d => d['Population (2020)'];
  //   const yValue = d => d['Country (or dependency)'];

  //   const xExtent = d3.extent(world_population, xValue);
  //   const xScale = d3
  //     .scaleLinear()
  //     .domain(xExtent)
  //     .range([0, width]);

  //   const yScale = d3
  //     .scaleBand()
  //     .domain(world_population.map(yValue))
  //     .range([0, height]);

  const xValue = d => d.data;
  const yValue = d => d.index;

  const xExtent = d3.extent(plot_data.values);
  const xScale = d3
    .scaleLinear()
    .domain(xExtent)
    .range([0, width]);

  const yScale = d3
    .scaleBand()
    .domain(plot_data.index)
    .range([0, height]);

  const selection = d3.select(svg);
  selection
    .selectAll('rect')
    .data(plot_data)
    .enter()
    .append('rect')
    .attr('fill', 'slateblue')
    .attr('y', d => yScale(d.index))
    .attr('width', d => xScale(d.data))
    .attr('height', yScale.bandwidth());
}

任何帮助或指示将不胜感激。

4

1 回答 1

0

这里真正的问题是关于您的数据结构:如何为 D3.js 目的切换到更方便的数据结构?

正如您所强调的,我们在 中有键,在 中有plot_data.index_arr数据plot_data.data

通过 a mapoverindex_arr我们得到索引。回调的第二个参数i是我们可以用来获取数据的索引,通过访问plot_data.data[i].

newData = plot_data.index_arr.map((d,i) => [d, plot_data.data[i]])

完成后,我们可以随意放置它们:这里我将它们放在一个数组中,但您可以将它们放在 {key:value} 对象或Map 对象中。

plot_data={
  index_arr:['a',"b", "c"],
  data:[1,2,3]
}
console.log(plot_data.index_arr.map((d,i) => [d, plot_data.data[i]]))

于 2020-09-11T10:58:53.207 回答