I want to fix the x-axis range so that when you clear a trace in the legend, the x-axis range doesn’t change—even if one trace has a different range.
I tried:
range: ["2016-05-01", "2016-05-05"]
Seems this should be all it takes, but the x-axis range still changes.
If I set autorange: false in the layout object, the plot fails. The x-axis values and ticks are all messed up. Why is this?
However, if I set the autorange property after the layout object definition with
layout_autorange_after = false;
Then all goes well.
Here’s how: http://codepen.io/etpinard/pen/YGLOZm
Explanation: at the moment the xaxis.range items have to be input in computed coordinates (i.e. not user coordinates unfortunately). So, in order to set the range of a date axis, one must input xaxis.range in unix timestamps. Luckily, this can easily be done using plain JS new Date() and .getTime().
Same behavior. Or maybe I’m not understanding what you are saying (definitely possible).
Aha!!! I added .getTime and it works. Just as you said 
function getTimestamp(datestring)
{
return (new Date(datestring)).getTime();
}
And added .map(getTimestamp) to all date lists.