plotly / plotly/plotly.js

redraw <chart type> with no changes is not a noop (svg mocks)

未关闭
#7,347 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

bug testing
主要语言
JavaScript
星标
18.3k
派生
2k
平均合并
2 天 12 小时
30 天内合并 PR
28

描述

  • We traced it back to 2.24.0 (https://github.com/plotly/plotly.js/releases/tag/v2.24.0), which includes a group of PR's that correspond to the exact same figure types that are failing. For example, in the sunburst PR, there's a line that updates the trace marker color.
  • From @alexcjohnson:
    • In sunburst/style.js (which is part of the plotting pipeline) we have
    if(marker.pattern) {
        if(!marker.colors || !marker.pattern.shape) marker.color = cdi.color;
    } else {
        marker.color = cdi.color;
    }
    
    • ie we’re changing _fullData during plotting. Which is a big no no. So yeah that’s where the noop is being broken, we should avoid that, which I bet in this case means creating a new mock trace object to pass into Drawing.pointStyle(s, trace, gd, pt); rather than modifying this one. But of course since this has been around for a year and a half, this is not a release blocker.
    • Also I’ll note, the code in question is in styleOne, meaning that it’ll be called once for every segment of the sunburst… so if you do go with a mock trace object, put the object creation up in style (which only happens once per trace) instead of in styleOne, and styleOne can keep reusing that same object.
      If it helps, you’re free to attach new things to the trace object during plotting as long as they start with _.
    • I’m thinking about things like here where we mock an axis in order to reuse logic from regular axis handling in 3D axes… or here where we mock the entire figure in the course of making a new shrunken version of the figure for rangesliders
  • Update after looking into it a bit: The code referenced above is now is fill_one.js. Added in this commit

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从 fill_one.js 开始,沿着 style/styleOne 路径跟踪到 Drawing.pointStyle(s, trace, gd, pt)。检查重绘期间 SVG mock 和 fullData 的处理方式,尤其是在受影响的图表类型中。完成的标准是:重绘未发生变化的图表不会修改底层数据,并且表现为 noop。

由索引模型根据 Issue 内容生成。

评估

技术栈
javascript
领域
data-visualization
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。