matplotlib автомасштабирует относительно конкретного участка [дубликат]

Ошибка: (30, 0) Метод Gradle DSL не найден: 'classpath ()' Возможные причины:

  • В проекте «cid» может использоваться версия подключаемого модуля Android Gradle, который не содержит метода (например, 'testCompile' был добавлен в 1.1.0). Обновление плагина до версии 2.3.3 и проекта синхронизации
  • В проекте «cid» может использоваться версия Gradle, которая не содержит этот метод. Open gradle wrapper file
  • В файле сборки может отсутствовать плагин Gradle. Применить плагин Gradle
  • 8
    задан jarondl 12 September 2011 в 12:03
    поделиться

    2 ответа

    Очевидным способом является просто установить ограничения на то, что вы хотите. (например, ax.axis([xmin, xmax, ymin, ymax]))

    Если вы не хотите беспокоиться об обнаружении пределов вручную, у вас есть несколько вариантов ...

    Как несколько человек (tillsten, Yann и Vorticity) упомянули, если вы можете построить функцию, которую хотите проигнорировать последним, тогда вы можете отключить автомасштабирование перед ее печатью или передать scaley=False kwarg в plot

    import numpy as np
    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    x1 = np.linspace(-1,1,100)
    
    ax.plot(x1, np.sin(x1))
    ax.plot(x1, np.sin(x1 / 2.0))
    ax.autoscale(False)         #You could skip this line and use scalex=False on
    ax.plot(x1, 3 * np.sin(x1)) #the "theoretical" plot. It has to be last either way
    
    fig.savefig('test.pdf')
    

    Примечание. что вы можете отрегулировать zorder последнего графика так, чтобы он рисовался в «середине», если вы хотите контролировать это.

    Если вы не хотите зависеть от порядка, и вы просто укажите список строк для автомасштабирования на основе, тогда вы можете сделать что-то вроде этого: (Примечание. Это упрощенная версия, предполагающая, что вы имеете дело с объектами Line2D, а не с художниками matplotlib вообще.)

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.transforms as mtransforms
    
    def main():
        fig, ax = plt.subplots()
        x1 = np.linspace(-1,1,100)
    
        line1, = ax.plot(x1, np.sin(x1))
        line2, = ax.plot(x1, 3 * np.sin(x1))
        line3, = ax.plot(x1, np.sin(x1 / 2.0))
        autoscale_based_on(ax, [line1, line3])
    
        plt.show()
    
    def autoscale_based_on(ax, lines):
        ax.dataLim = mtransforms.Bbox.unit()
        for line in lines:
            xy = np.vstack(line.get_data()).T
            ax.dataLim.update_from_data_xy(xy, ignore=False)
        ax.autoscale_view()
    
    if __name__ == '__main__':
        main()
    

    enter image description here [/g0]

    14
    ответ дан Joe Kington 18 August 2018 в 23:10
    поделиться
    • 1
      Вау! Спасибо, это именно то, что я искал. Единственная проблема заключается в неявном предположении, что диапазон больше, чем блок bbox. Я решил это, добавив вызов update_from_data_xy с первой строкой и с ignore = True перед циклом. – jarondl 13 September 2011 в 14:59

    Используйте scalex / scaley kw arg:

    plot(x1, 3*sin(x1), scaley=False)
    
    6
    ответ дан tillsten 18 August 2018 в 23:10
    поделиться
    • 1
      Документация здесь довольно вводит в заблуждение ... Это не делает то, что вы думаете. Он временно отключает автомасштабирование, но в следующий раз сюжет будет перемасштабирован на основе all предыдущих графиков. Другими словами, он будет работать только в том случае, если в последний раз вызывается plot. – Joe Kington 12 September 2011 в 20:30
    • 2
      Учитывая это, есть ли лучшее решение? Отключение автомасштабирования для экземпляра осей делает трюк? ax.autoscale (enable = False, axis = 'both') – Vorticity 12 September 2011 в 21:07
    • 3
      Ну, это уже улучшает проблему «игнорировать последний сюжет», спасибо вам. Однако, как говорит Джо-Кингтон, это не решает проблему. Я надеюсь на решение в этом духе или, возможно, что-то связанное с предоставлением matplotlib списка художников, которые я хочу, чтобы он учитывал при перемасштабировании. – jarondl 12 September 2011 в 21:15
    • 4
      Да, теперь Джо упомянул об этом, я помню, что у меня была такая же проблема, я думаю, что использовал ручной заказ ограничений. Надеемся, что есть лучшее решение. – tillsten 13 September 2011 в 01:23
    Другие вопросы по тегам:

    Похожие вопросы: