Skip to content

Commit 493bb4e

Browse files
committed
Handle axis breaks on reversed ranges
- add mock with reversed autoranges on horizontal and vertical bars
1 parent 53196e5 commit 493bb4e

File tree

4 files changed

+199
-3
lines changed

4 files changed

+199
-3
lines changed

src/components/rangeslider/draw.js

+2
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ module.exports = function(gd) {
148148
lBreaks += (brk.max - brk.min);
149149
}
150150

151+
// TODO fix for reversed-range axes !!!
152+
151153
// compute slope and piecewise offsets
152154
var m2 = opts._width / (rl1 - rl0 - lBreaks);
153155
var _B = [-m2 * rl0];

src/plots/cartesian/set_convert.js

+12-3
Original file line numberDiff line numberDiff line change
@@ -571,15 +571,19 @@ module.exports = function setConvert(ax, fullLayout) {
571571
if(ax.breaks) {
572572
var i, brk;
573573

574-
ax._breaks = ax.locateBreaks(rl0, rl1);
574+
ax._breaks = ax.locateBreaks(
575+
Math.min(rl0, rl1),
576+
Math.max(rl0, rl1)
577+
);
578+
var signAx = rl0 > rl1 ? -1 : 1;
575579

576580
if(ax._breaks.length) {
577581
for(i = 0; i < ax._breaks.length; i++) {
578582
brk = ax._breaks[i];
579583
ax._lBreaks += (brk.max - brk.min);
580584
}
581585

582-
ax._m2 = ax._length / (rl1 - rl0 - ax._lBreaks);
586+
ax._m2 = ax._length / (rl1 - rl0 - ax._lBreaks * signAx);
583587

584588
if(axLetter === 'y') {
585589
ax._breaks.reverse();
@@ -591,7 +595,11 @@ module.exports = function setConvert(ax, fullLayout) {
591595

592596
for(i = 0; i < ax._breaks.length; i++) {
593597
brk = ax._breaks[i];
594-
ax._B.push(ax._B[ax._B.length - 1] - ax._m2 * (brk.max - brk.min));
598+
ax._B.push(ax._B[ax._B.length - 1] - ax._m2 * (brk.max - brk.min) * signAx);
599+
}
600+
601+
if(signAx === -1) {
602+
ax._B.reverse();
595603
}
596604

597605
// fill pixel (i.e. 'p') min/max here,
@@ -651,6 +659,7 @@ module.exports = function setConvert(ax, fullLayout) {
651659
b0 = bnds[1];
652660
b1 = bnds[0];
653661
}
662+
// TODO should work with reversed-range axes
654663
vb = v;
655664
break;
656665
}
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
{
2+
"data": [
3+
{
4+
"type": "bar",
5+
"x": [
6+
"2020-01-02 08:00",
7+
"2020-01-02 16:00",
8+
"2020-01-03 08:00",
9+
"2020-01-03 16:00",
10+
"2020-01-04 08:00",
11+
"2020-01-04 16:00",
12+
"2020-01-05 08:00",
13+
"2020-01-05 16:00",
14+
"2020-01-06 08:00",
15+
"2020-01-06 16:00",
16+
"2020-01-07 08:00",
17+
"2020-01-07 16:00"
18+
],
19+
"y": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
20+
},
21+
{
22+
"xaxis": "x2",
23+
"yaxis": "y2",
24+
"type": "bar",
25+
"x": [
26+
"2020-01-02 08:00",
27+
"2020-01-02 16:00",
28+
"2020-01-03 08:00",
29+
"2020-01-03 16:00",
30+
"2020-01-04 08:00",
31+
"2020-01-04 16:00",
32+
"2020-01-05 08:00",
33+
"2020-01-05 16:00",
34+
"2020-01-06 08:00",
35+
"2020-01-06 16:00",
36+
"2020-01-07 08:00",
37+
"2020-01-07 16:00"
38+
],
39+
"y": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
40+
},
41+
{
42+
"xaxis": "x3",
43+
"yaxis": "y3",
44+
"type": "bar",
45+
"orientation": "h",
46+
"y": [
47+
"2020-01-02 08:00",
48+
"2020-01-02 16:00",
49+
"2020-01-03 08:00",
50+
"2020-01-03 16:00",
51+
"2020-01-04 08:00",
52+
"2020-01-04 16:00",
53+
"2020-01-05 08:00",
54+
"2020-01-05 16:00",
55+
"2020-01-06 08:00",
56+
"2020-01-06 16:00",
57+
"2020-01-07 08:00",
58+
"2020-01-07 16:00"
59+
],
60+
"x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
61+
},
62+
{
63+
"xaxis": "x4",
64+
"yaxis": "y4",
65+
"type": "bar",
66+
"orientation": "h",
67+
"y": [
68+
"2020-01-02 08:00",
69+
"2020-01-02 16:00",
70+
"2020-01-03 08:00",
71+
"2020-01-03 16:00",
72+
"2020-01-04 08:00",
73+
"2020-01-04 16:00",
74+
"2020-01-05 08:00",
75+
"2020-01-05 16:00",
76+
"2020-01-06 08:00",
77+
"2020-01-06 16:00",
78+
"2020-01-07 08:00",
79+
"2020-01-07 16:00"
80+
],
81+
"x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
82+
}
83+
],
84+
"layout": {
85+
"showlegend": false,
86+
"width": 800,
87+
"height": 800,
88+
"xaxis": {
89+
"breaks": [
90+
{
91+
"pattern": "%w",
92+
"bounds": [
93+
6,
94+
0
95+
],
96+
"operation": "[]"
97+
}
98+
],
99+
"domain": [
100+
0,
101+
0.48
102+
]
103+
},
104+
"xaxis2": {
105+
"breaks": [
106+
{
107+
"pattern": "%w",
108+
"bounds": [
109+
6,
110+
0
111+
],
112+
"operation": "[]"
113+
}
114+
],
115+
"autorange": "reversed",
116+
"anchor": "y2",
117+
"domain": [
118+
0.52,
119+
1
120+
]
121+
},
122+
"xaxis3": {
123+
"anchor": "y3",
124+
"domain": [
125+
0,
126+
0.48
127+
]
128+
},
129+
"xaxis4": {
130+
"anchor": "y4",
131+
"domain": [
132+
0.52,
133+
1
134+
]
135+
},
136+
"yaxis": {
137+
"domain": [
138+
0,
139+
0.48
140+
]
141+
},
142+
"yaxis2": {
143+
"anchor": "x2",
144+
"domain": [
145+
0.52,
146+
1
147+
]
148+
},
149+
"yaxis3": {
150+
"breaks": [
151+
{
152+
"pattern": "%w",
153+
"bounds": [
154+
6,
155+
0
156+
],
157+
"operation": "[]"
158+
}
159+
],
160+
"anchor": "x3",
161+
"domain": [
162+
0.52,
163+
1
164+
]
165+
},
166+
"yaxis4": {
167+
"breaks": [
168+
{
169+
"pattern": "%w",
170+
"bounds": [
171+
6,
172+
0
173+
],
174+
"operation": "[]"
175+
}
176+
],
177+
"autorange": "reversed",
178+
"anchor": "x4",
179+
"domain": [
180+
0,
181+
0.48
182+
]
183+
}
184+
}
185+
}

0 commit comments

Comments
 (0)