antvis / F2

📱📈An elegant, interactive and flexible charting library for mobile.
https://f2.antv.vision/zh
MIT License
7.89k stars 649 forks source link

双Y轴,当一个轴的数据都取消选择时,Y轴坐标错误 #717

Closed luna2216 closed 4 years ago

luna2216 commented 4 years ago

Reproduction link

https://codepen.io/luna_2216/pen/xxxogrB?editors=0010

Steps to reproduce

点击图例,把任意一个数据勾选

What is expected?

Y坐标轴与所有数据都均去勾选时一致

What is actually happening?

被去勾选的Y坐标轴变成[-1, 0, 1, 2]

Environment Info
f2 3.4.3
System win10
Browser Chrome 78

https://github.com/antvis/f2/blob/master/src/chart/chart.js#L685 此处不应该值判断filteredData是否为空,还应该判断是否存在有field字段的数据

benvirus commented 4 years ago

1、感觉你这个图单 Y 轴更适合,两个 Y 轴更不能第一时间判断那条线对应的是右边这个轴。 2、个人认为你 expect 的这个结果不太合适,因为我看到例子中对应右边 Y 轴的数据只有一条折线。如果有两条折线对应右边的 Y 轴,在通过 legend 隐藏一条的时候,为了更好的展示,会动态调整 Y 轴的 range, 那么再隐藏剩下的一条时,你期待 Y 轴的坐标是保留两条线时的情况呢,还是保留一条线时的情况呢 ?请看示例

所以我感觉可能要想一个更好的 expect result

benvirus commented 4 years ago

哦,对了,如果你不想让那个轴的数值发生变化,可以通过设置 scale 的 min 和 max 来固定它。

luna2216 commented 4 years ago

业务场景是两个数据是有相关性的,但数值范围及单位是不一样的,所以要用双Y轴展示在一个图里。 你提到的有两条线对应右侧Y轴,去勾选其中一条当前的实现就是OK的,有问题的是当两条数据都去勾选时,我举例里只有一条数据只是为了方便复现问题。 这里两个Y轴可以认为是相互独立的,如果当一个轴的数据全都没有勾选的话,应该和所有数据全部去勾选时是一致的,当前f2所有数据全部去勾选时和全部勾选时展示的坐标轴是一样的,这个逻辑应该是要统一的。 至于通过scale去固定,那我要首先要在f2外处理返回数据,而且为了和其他坐标轴逻辑保持一致,还要去吧f2的内部对数据进行nice的处理拷贝一份出来在。

benvirus commented 4 years ago

嗯,我可能偏向于当一个 Y 轴相关的数据取消勾选的时候,这个 Y 轴隐藏掉。

zengyue commented 4 years ago

对,如果不想隐藏的话,那么就设置下 min, max