D3.js 当两个条形图的值均为0时,相对条形图模式标签中的Plotly.js重叠

D3.js 当两个条形图的值均为0时,相对条形图模式标签中的Plotly.js重叠,d3.js,plotly,plotly.js,D3.js,Plotly,Plotly.js,继续我的旅程。我正在使用,当两个相对的条都有值0时,我需要显示一些自定义文本。值为0时,两条条线的增长方向相同,标签重叠的问题: 我考虑过的唯一解决方案是检查值何时为0,并将其动态更改为类似-0.009的值,然后手动显示正确的值,尽管它实际上是错误的。但这是一个麻烦的解决方案,图表会不断地为那些不可接受的值呈现微小的条形图 标签方向可以手动控制吗?谢谢。最初的想法 一种解决方案是将每条记录道的基本参数指定为0,如果值为0,则为负条形使用负的基本值 const altbase=-1000/3;

继续我的旅程。我正在使用,当两个相对的条都有值
0
时,我需要显示一些自定义文本。值为0时,两条条线的增长方向相同,标签重叠的问题:

我考虑过的唯一解决方案是检查值何时为
0
,并将其动态更改为类似
-0.009
的值,然后手动显示正确的值,尽管它实际上是错误的。但这是一个麻烦的解决方案,图表会不断地为那些不可接受的值呈现微小的条形图

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

最初的想法 一种解决方案是将每条记录道的基本参数指定为0,如果值为0,则为负条形使用负的基本值

const altbase=-1000/3;
常量trace1={
x:xValue,
y:[FN],
名称:`Model 1`,
文本:`${FN}
FN`, 类型:'bar', 基数:0, text位置:“外部” }; 常量trace2={ x:xValue, y:[-TN], 名称:“型号1”, 正文:`${TN}
TN`, 基地:altbase, 类型:'bar', text位置:“外部” };
看起来
-max_y_lim/3
会产生一个良好的偏移量,这就是
altbase
的用途

如果TN==0,您还可以将
altbase
定义为变量检查:

var altbase=((TN==0)?-FP/3:0);
UPDATE1:或者您可以绕过变量,将if语句直接放入跟踪定义中,如
base:((TN==0)?-FP/3:0),

更新2:偏移量的一个稍微优雅的公式是:

var altbase=((TN==0)?-1.4/4*数学最大值(FN,TN,TP,FP):0);
最后更新 经过一些思考后,可能最好总是计算
altbase
,以便它可用于其他潜在的负极条,然后在需要时使用if语句设置
base:

var altbase=-1.4/4*数学最大值(FN、TN、TP、FP);
常量trace1={
x:xValue,
y:[FN],
名称:`Model 1`,
文本:`${FN}
FN`, 类型:'bar', 基数:0, text位置:“外部” }; 常量trace2={ x:xValue, y:[-TN], 名称:“型号1”, 正文:`${TN}
TN`, 基数:((TN==0)?altbase:0), 类型:'bar', text位置:“外部” };
是代码笔中的实现


谢谢你的回答,但有点问题。如果我改变一点数字,它就不起作用了。看看这个代码笔:我意识到这两个条形图是独立的图,因此基于所有值计算
altbase
并不总是有效的。将它们组合成一个带有两条横线的地块是可行的。或者,使用现有框架进行更简单的计算是,但如果两者都为零,则这只会抵消负面影响。类似于
base:((TN==0&FN==0)?-.25:0)
也是一个在一个图中有两条线的例子。谢谢你的回答,但我不能接受。这并不容易实现,我得出的结论是,除了继续与plotlyjs团队讨论并在库中添加修复程序之外,没有解决此问题的好方法。实际上,我在这里打开了一个问题:我将尝试安排修复并提交它。我对你的努力表示歉意和感谢。