为什么我的D3.js堆积条形图显示不准确

368yc8dk  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(216)

我在d3.js中创建了一个堆积条形图,但遇到了一些问题。我的图表如下所示(在D3.js中创建):

但它应该看起来像这样(用Observable.Plot创建):

如何将我的代码更改为:
1.在正确的位置显示X轴上的条形图
1.更改每个栏的高度以使其准确
1.更改每个条形图的颜色以准确显示正确的数据
1.由于宽度是动态的(日期范围可以在此函数外部更改),我可以将什么作为每个条形图的“宽度”?
如果我的数据结构不正确,请让我知道。我不确定它是否被d3.stack()正确堆叠;
初始数据:(为简单起见,不必要的数据点被涂黑)

这是叠加后的相同数据:

每个阵列具有:
x1c4d 1x指令集
这是我的堆栈函数:

const stack: any = d3
      .stack()
      .keys(services) // string[]
      .value((x) => x.count); // count is a number

    var data = stack(props.data);

    console.log(props.data); // initial data array (as shown)
    console.log(data); // data array after stacking (as shown)

比例尺:

// x axis time scale
    const xAxisScale_min: Date = d3.min(props.data.map((i) => i.createdDate))!;
    const xAxisScale_max: Date = d3.max(props.data.map((i) => i.createdDate))!;
    const x = d3
      .scaleTime()
      .domain([xAxisScale_min, xAxisScale_max])
      .range([0, WIDTH]);

const yAxisScale_max: any = 10;
// y axis scale
const y = d3.scaleLinear().domain([0, yAxisScale_max]).range([HEIGHT, 0]);

这是创建每个矩形的代码

const rects = g.selectAll("rects").data(data);

    var color = d3.scaleOrdinal(services, d3.schemeCategory10);

    svg
      .append("g")
      .selectAll("g")
      // Enter in the stack data = loop key per key = group per group
      .data(data)
      .enter()
      .append("g")
      .attr("fill", function (d: any) {
        return color(d.key);
      })
      .selectAll("rect")
      // enter a second time = loop subgroup per subgroup to add all rectangles
      .data(function (d): any {
        return d;
      })
      .enter()
      .append("rect")
      .attr("x", function (d: any) {
        return x(new Date(d.data.createdDate));
      })
      .attr("y", function (d: any) {
        return y(d[1]);
      })
      .attr("height", function (d: any) {
        return y(d[0]) - y(d[1]);
      })
      .attr("width", WIDTH / props.data.length);

如果你需要x轴和y轴的网格信息,我也可以显示出来,但为了简单起见,我省略了它。

mbjcgjjk

mbjcgjjk1#

如果有人遇到同样的问题,问题是由于我的数据没有被正确格式化。我有一个“服务”的键和一个服务的实际名称的值。相反,我把每个对象都改成有一个服务的实际名称的“键”和一个“计数”的值。
更改数据后,图表开始正常显示。

相关问题