function setAxisModel(axisProxy, isRestore) {
    var axisModel = axisProxy.getAxisModel();

    var percentWindow = axisProxy._percentWindow;
    var valueWindow = axisProxy._valueWindow;

    if (!percentWindow) {
        return;
    }

    // [0, 500]: arbitrary value, guess axis extent.
    var precision = getPixelPrecision(valueWindow, [0, 500]);
    precision = Math.min(precision, 20);
    // isRestore or isFull
    var useOrigin = isRestore || (percentWindow[0] === 0 && percentWindow[1] === 100);

    axisModel.setRange(
        useOrigin ? null : +valueWindow[0].toFixed(precision),
        useOrigin ? null : +valueWindow[1].toFixed(precision)
    );
}
It is `[rangeModeForMin, rangeModeForMax]`.
The optional values for `rangeMode`:
+ `'value'` mode: the axis extent will always be determined by
    `dataZoom.startValue` and `dataZoom.endValue`, despite
    how data like and how `axis.min` and `axis.max` are.
+ `'percent'` mode: `100` represents 100% of the `[dMin, dMax]`,
    where `dMin` is `axis.min` if `axis.min` specified, otherwise `data.extent[0]`,
    and `dMax` is `axis.max` if `axis.max` specified, otherwise `data.extent[1]`.
    Axis extent will be determined by the result of the percent of `[dMin, dMax]`.

For example, when users are using dynamic data (update data periodically via `setOption`),
if in `'value`' mode, the window will be kept in a fixed value range despite how
data are appended, while if in `'percent'` mode, whe window range will be changed alone with
the appended data (suppose `axis.min` and `axis.max` are not specified).

@private