antvis/G2

point图使用数据调整功能时,point跑到错误位置 #3737

ouyuran posted onGitHub

  • I have searched the issues of this repository and believe that this is not a duplicate.

Edit on CodeSandbox

Steps to reproduce

如DEMO所示,数据有A-E 5种类别,使用adjust功能防止point重叠。 如果五种类别都有至少一个数据,此时显示正常。 如果其中一个类别没有数据,如DEMO中,类别C没有数据,则C的空间会被相邻类别B/D占据。 正确的现实应该为,当没有类别C的数据时,它的空间应该为空。 Screen Shot 2021-12-08 at 4 40 08 PM

Environment Info
g2 4.1.34
System -
Browser -

<!-- generated by antv-issue-helper. DO NOT REMOVE -->


const container = createDiv();
    const chart = new Chart({
      container,
      autoFit: true,
      width: 300,
      height: 300,
      padding: 0,
    });

    chart.data(data);
    chart.scale('category', {
      type: 'cat',
      values: ['A', 'B', 'C', 'D', 'E'],
      range: [0, 1],
      nice: true,
    });
    chart.axis('category', {
      grid: {
        alignTick: false,
      },
    });

    chart.point().adjust('jitter').position('category*value');

    chart.render();

https://github.com/antvis/G2/blob/b0ae2314fc39fec21cb98ada305eaceb02f13bc9/src/geometry/base.ts#L1825 result的值类似下面这样的

[
  [
    { "category": 0, "value": 1, "_origin": { "category": "A", "value": 1 } },
    { "category": 0, "value": 1.5, "_origin": { "category": "A", "value": 1.5 } },
    { "category": 1, "value": 2, "_origin": { "category": "B", "value": 2 } },
    { "category": 1, "value": 2, "_origin": { "category": "B", "value": 2 } },
    { "category": 1, "value": 2, "_origin": { "category": "B", "value": 2 } },
    { "category": 1, "value": 2, "_origin": { "category": "B", "value": 2 } },
    { "category": 1, "value": 2, "_origin": { "category": "B", "value": 2 } },
    { "category": 1, "value": 2, "_origin": { "category": "B", "value": 2 } },
    { "category": 1, "value": 2, "_origin": { "category": "B", "value": 2 } },
    { "category": 1, "value": 2, "_origin": { "category": "B", "value": 2 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 3, "value": 3, "_origin": { "category": "D", "value": 3 } },
    { "category": 4, "value": 3, "_origin": { "category": "E", "value": 3 } }
  ]
]

adjust获取到的data是没有 category:C的,adjust不知道有C这个种类,但是scale会影响绘图坐标刻度,scale多了C这个category,这就导致了绘制几何图形B种类的点跑到C区域里去。 adjust的实现属于另外一个repo https://github.com/antvis/adjust/blob/7447e756a31ef25d911e021109cc99742cb6e63a/src/adjusts/jitter.ts 理论上没什么问题,但是没有考虑到 scale造成的影响。

posted by rainy-25Ghz over 3 years ago

可以看下,adjust 这个库目前是按照 groupData 来确定究竟有多少分组。但是实际上忽略了没有数据的那部分,可以看下该从哪里解决,让其识别准确的分组

posted by visiky over 3 years ago

Fund this Issue

$0.00
Funded

Pull requests