-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Fix rangeslider titles with stacked y axes #2451
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,6 +16,7 @@ var Plots = require('../../plots/plots'); | |
var Lib = require('../../lib'); | ||
var Drawing = require('../drawing'); | ||
var Color = require('../color'); | ||
var Titles = require('../titles'); | ||
|
||
var Cartesian = require('../../plots/cartesian'); | ||
var Axes = require('../../plots/cartesian/axes'); | ||
|
@@ -76,8 +77,7 @@ module.exports = function(gd) { | |
// for all present range sliders | ||
rangeSliders.each(function(axisOpts) { | ||
var rangeSlider = d3.select(this), | ||
opts = axisOpts[constants.name], | ||
oppAxisOpts = fullLayout[Axes.id2name(axisOpts.anchor)]; | ||
opts = axisOpts[constants.name]; | ||
|
||
// update range | ||
// Expand slider range to the axis range | ||
|
@@ -96,11 +96,17 @@ module.exports = function(gd) { | |
|
||
// update range slider dimensions | ||
|
||
var margin = fullLayout.margin, | ||
graphSize = fullLayout._size, | ||
domain = axisOpts.domain, | ||
oppDomain = oppAxisOpts.domain, | ||
tickHeight = (axisOpts._boundingBox || {}).height || 0; | ||
var margin = fullLayout.margin; | ||
var graphSize = fullLayout._size; | ||
var domain = axisOpts.domain; | ||
var tickHeight = (axisOpts._boundingBox || {}).height || 0; | ||
|
||
var oppBottom = Infinity; | ||
var subplotData = Axes.getSubplots(gd, axisOpts); | ||
for(var i = 0; i < subplotData.length; i++) { | ||
var oppAxis = Axes.getFromId(gd, subplotData[i].substr(subplotData[i].indexOf('y'))); | ||
oppBottom = Math.min(oppBottom, oppAxis.domain[0]); | ||
} | ||
|
||
opts._id = constants.name + axisOpts._id; | ||
opts._clipId = opts._id + '-' + fullLayout._uid; | ||
|
@@ -112,7 +118,7 @@ module.exports = function(gd) { | |
var x = Math.round(margin.l + (graphSize.w * domain[0])); | ||
|
||
var y = Math.round( | ||
margin.t + graphSize.h * (1 - oppDomain[0]) + | ||
graphSize.t + graphSize.h * (1 - oppBottom) + | ||
tickHeight + | ||
opts._offsetShift + constants.extraPad | ||
); | ||
|
@@ -151,18 +157,29 @@ module.exports = function(gd) { | |
// update current range | ||
setPixelRange(rangeSlider, gd, axisOpts, opts); | ||
|
||
// update margins | ||
// title goes next to range slider instead of tick labels, so | ||
// just take it over and draw it from here | ||
Titles.draw(gd, axisOpts._id + 'title', { | ||
propContainer: axisOpts, | ||
propName: axisOpts._name + '.title', | ||
placeholder: fullLayout._dfltTitle.x, | ||
attributes: { | ||
x: axisOpts._offset + axisOpts._length / 2, | ||
y: y + opts._height + opts._offsetShift + 10 + 1.5 * axisOpts.titlefont.size, | ||
'text-anchor': 'middle' | ||
} | ||
}); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where to put this @etpinard this is what got me thinking about altering our plotting pipeline with some intermediate step that's just concerned with arranging all the components but doesn't draw anything other than prerendering and stashing all the text we need sizes for. Also, I started trying to pull out the |
||
|
||
// update margins | ||
Plots.autoMargin(gd, opts._id, { | ||
x: domain[0], | ||
y: oppDomain[0], | ||
y: oppBottom, | ||
l: 0, | ||
r: 0, | ||
t: 0, | ||
b: opts._height + margin.b + tickHeight, | ||
pad: constants.extraPad + opts._offsetShift * 2 | ||
}); | ||
|
||
}); | ||
}; | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
{ | ||
"data": [ | ||
{"y": [1, 2, 3], "yaxis": "y2"}, | ||
{"fill": "tozeroy", "y": [30, 20, 10]} | ||
], | ||
"layout": { | ||
"xaxis": {"rangeslider": {}, "title": "x", "anchor": "y"}, | ||
"yaxis": {"title": "y", "domain": [0, 0.25]}, | ||
"yaxis2": {"title": "y2", "domain": [ 0.3, 1]} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Referencing #2172 and more specifically #2172 (comment) - so if I understand correctly, the baseline for this mock is wrong as the desired behavior would be replicate the stacked y-axes in the range slider? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
... I hope these patched lines won't conflict with #2364