Как ylim будет автоматическим из данных для данного xlim в matplotlib?

У меня есть данные по большому диапазону x. Теперь я хочу, чтобы ylim был автоматическим для указанного xlim. Так же, как «автоматическое масштабирование» в gnuplot или PlotRange-> «Автоматический» в mathematica.


person deltasata    schedule 30.11.2014    source источник
comment
возможный дубликат Автоматическое изменение масштаба ylim и xlim в Matplotlib   -  person sebix    schedule 30.11.2014


Ответы (1)


Используйте значения min и max для этого диапазона:

>>> data = np.random.random((1000,))
>>> data.shape
(1000,)
>>> plt.plot(data)
[<matplotlib.lines.Line2D object at 0x37b7f50>]
>>> plt.ion()
>>> plt.show()
>>> plt.xlim(450,470)
>>> plt.ylim(np.min(data[450:470+1]), np.max(data[450:470+1]))

Или использовать функцию, выполняющую оба действия:

def plot_autolimit(x, y=None, limit=None):
    if y is None:
        plt.plot(x)
    else:
        plt.plot(x, y)
    if limit is not None:
        plt.xlim(limit)
        if y is None:
            plt.ylim(np.min(x[limit[0]:limit[1]+1]), np.max(x[limit[0]:limit[1]+1]))
        else:
            plt.ylim(np.min(y[limit[0]:limit[1]+1]), np.max(y[limit[0]:limit[1]+1]))

Это также работает для заданных значений x и всех ограничений, которые вы хотите:

plot_autolimit(np.arange(data.size), data, limit=[3,49])
person sebix    schedule 30.11.2014
comment
Почему бы не использовать plt.relimи plt.autoscale_viewкак предложено в ответе, который вы указали в комментариях к вопросу? (--› stackoverflow.com /вопросы/10984085/) - person hitzg; 01.12.2014
comment
Потому что я не копирую решение оттуда. И это дубликат. - person sebix; 01.12.2014