d3.js - 当两个条的值为 0 时,相对 barmode 标签中的 Plotly.js 会重叠

标签 d3.js plotly plotly.js

继续我的旅程 Plotly.js .我正在使用 relative barmode并且当两个相对的条形都具有值 0 时需要显示一些自定义文本.对于值 0,两个条形向同一方向生长并且标签重叠的问题:
enter image description here

我想到的唯一解决方案是检查值何时为 0并将其动态更改为类似 -0.009 的内容并手动显示正确的值,尽管它实际上是错误的。但这是一个繁琐的解决方案,图表不断为那些 Not Acceptable 值呈现小条。

This is my example on Codepen

标签方向可以手动控制吗?谢谢你。

最佳答案

初步想法

一种解决方案是将每个轨迹的基本参数指定为 0,如果值为 0,则对于负条使用负基值。

      const altbase=-1000/3;

      const trace1 = {
        x: xValue,
        y: [FN],
        name: `Model 1`,
        text: `${FN} <br> FN`,
        type: 'bar',
        base: 0,
        textposition: 'outside'
      };
      const trace2 = {
        x: xValue,
        y: [-TN],
        name: 'Model 1',
        text: `${TN} <br> TN`,
        base: altbase,
        type: 'bar',
        textposition: 'outside'
      };

它看起来像 -max_y_lim / 3产生很好的偏移,这就是 altbase是用来。

您还可以定义 altbase作为检查 TN==0 的变量:

var altbase = ((TN==0) ? -FP/3 : 0);

UPDATE1: 或者您可以绕过变量并将 if 语句放入跟踪定义中,例如 base: ((TN==0) ? -FP/3 : 0),
UPDATE2: 一个稍微更优雅的偏移方程是:

var altbase = ((TN==0) ? -1.4/4*Math.max(FN,TN,TP,FP) : 0);

最终更新

经过一番思考后,最好总是计算 altbase以便它可用于另一个潜在的负柱,然后使用 if 语句来设置 base:需要的地方。

      var altbase = -1.4/4*Math.max(FN,TN,TP,FP);

      const trace1 = {
        x: xValue,
        y: [FN],
        name: `Model 1`,
        text: `${FN} <br> FN`,
        type: 'bar',
        base: 0,
        textposition: 'outside'
      };
      const trace2 = {
        x: xValue,
        y: [-TN],
        name: 'Model 1',
        text: `${TN} <br> TN`,
        base: ((TN==0) ? altbase : 0),
        type: 'bar',
        textposition: 'outside'
      };

Here是 CodePen 中的实现。

enter image description here

关于d3.js - 当两个条的值为 0 时,相对 barmode 标签中的 Plotly.js 会重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61657786/

相关文章:

javascript - 减少 Plotly.js 库的大小

javascript - 如何使用 D3.js 正确缩放?

javascript - d3 操作 html 的最佳方式是什么?

python - 如何删除 x 轴的垂直线并向绘图子图添加标签?

python - Plotly:如何在同一个子图中显示超过 2 个 x 轴标题/范围?

javascript - 如果列有 'NULL' 则选择该行数据

javascript - 如何访问 csv 文件的一行来填充我的 d3.js 图表?

json - 使用 d3.json()/d3.xhr() 的多部分发布请求

r - 只为一个函数加载依赖

angular - 如果我将鼠标悬停在 Plotly 中,如何显示与图例中所述不同的跟踪名称?