好的,我深入研究了Plotly的配置选项,并发现有些选项是根据缩放级别半自动修改的,但这些修改发生的时间是硬编码的。
因此,我提供了一个补丁(适用于Plotly v1.36,因为这是我们目前使用的版本)。我修改了一些硬编码的条件,从1、10、100、...到1、2、5、10、20、50、100、...,在对数轴上标记为1、2、3、4、5、...,并删除了最后一种情况下4、6、8和9的刻度标签,以避免文本重叠。
![enter image description here](https://istack.dev59.com/koeuQ.gif)
对于我的应用程序,现在它运行良好,我找不到任何重叠的刻度标签。此外,我还去掉了十的幂之间的单个数字,这使一些用户感到困惑。
--- a/plotly-latest.v1.36.js 2021-05-24 21:45:28.000000000 +0100
+++ b/plotly-latest.v1.36.js 2022-02-02 10:21:08.000000000 +0100
@@ -127302,13 +127302,13 @@
if(!nt) {
if(ax.type === 'category') {
minPx = ax.tickfont ? (ax.tickfont.size || 12) * 1.2 : 15;
nt = ax._length / minPx;
}
else {
- minPx = ax._id.charAt(0) === 'y' ? 40 : 80;
+ minPx = ax._id.charAt(0) === 'y' ? 40 : 100;
nt = Lib.constrain(ax._length / minPx, 4, 9) + 1;
}
if(ax._name === 'radialaxis') nt *= 2;
@@ -127395,14 +127395,21 @@
ax._prevDateHead = '';
ax._inCalcTicks = true;
var ticksOut = new Array(vals.length);
- for(var i = 0; i < vals.length; i++) ticksOut[i] = axes.tickText(ax, vals[i]);
+
+ var skipTexts = /^[4689]/;
+ var text;
+ for(var i = 0; i < vals.length; i++) {
+ text = axes.tickText(ax, vals[i]);
+ if(ax.type == "log" && ax.dtick == "D1" && text.text.match(skipTexts)) text.text = "";
+ ticksOut[i] = text;
+ }
ax._inCalcTicks = false;
return ticksOut;
};
function arrayTicks(ax) {
@@ -127535,18 +127542,20 @@
roughDTick = Math.abs(Math.pow(10, rng[1]) -
Math.pow(10, rng[0])) / nt;
base = getBase(10);
ax.dtick = 'L' + roundDTick(roughDTick, base, roundBase10);
+ ax.tickformat = '';
}
else {
- ax.dtick = (roughDTick > 0.3) ? 'D2' : 'D1';
+ ax.dtick = (roughDTick > 0.4) ? 'D2' : 'D1';
+ ax.tickformat = '0.1s';
+ ax.hoverformat = '0.2s';
}
}
else if(ax.type === 'category') {
ax.tick0 = 0;
ax.dtick = Math.ceil(Math.max(roughDTick, 1));
}
此补丁已发布为公共领域,以使其尽可能易于直接集成到Plotly中(也许作为“D3”格式选项?)。
tickmode: array
,但你只需要担心编写一次该函数即可。 - Derek O