Как называется функция matplotlib, которая выполняется при первоначальном построении графика данных, который правильно устанавливает все оси? - PullRequest
1 голос
/ 06 июня 2019

Когда я строю некоторые данные с помощью matplotlib без установки каких-либо параметров, данные отображаются с правильно заданными пределами осей x и y, что означает, что все данные отображаются без пробелов (случай 1):

import matplotlib
matplotlib.use('QT5Agg')
import matplotlib.pyplot as plt
x = range(10)

plt.plot(x,'-o',markersize='10')

plt.tight_layout()
plt.show()

Результат:

case 1: initial plotting without any limits set

Если я установлю некоторые ограничения, например, для оси x, даже использование autoscale() больше не будет автоматически масштабировать ось y(случай 2):

import matplotlib
matplotlib.use('QT5Agg')
import matplotlib.pyplot as plt
x = range(10)

plt.plot(x,'-o',markersize='10')
plt.autoscale(enable=True,axis='y')
plt.xlim(7.5,11)
plt.tight_layout()
plt.show()

Результат:

case 2: using x limits

Вопрос: какая функция используется внутри программы matplotlib дляопределить пределы для обеих осей и обновить график в случае 1?

Справочная информация. Я хочу использовать эту функцию в качестве основы для повторной реализации / расширения этой функциональности для случая 2.

1 Ответ

1 голос
/ 06 июня 2019

Как указывалось в ответе ниже @ ImportanceOfBeingEarnest , такого автоматизированного способа на данный момент не существует. Таким образом, в случае, если вы заинтересованы в том, чтобы узнать, как изменить масштаб вашей оси y, один из способов сделать это - пересчитать соответствующие значения y, а затем переназначить пределы y, используя метод, указанный в this unaccepted ответ. Я не помечал это как дубликат, потому что в вашем примере есть определенные проблемы:

  • Во-первых (основной), вы построили только значения х. Итак, чтобы применить метод в другом ответе, мне сначала нужно было получить значения y в массиве. Это делается с помощью get_ydata()
  • Во-вторых, значения x были изменены с генератора range() на массив NumPy, поскольку первый не поддерживает индексирование.
  • В-третьих, мне пришлось использовать переменную для x-пределов, чтобы соответствовать функции.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)

plt.plot(x,'-o',markersize='10')
x_lims = [7.5, 11]
plt.xlim(x_lims)

ax = plt.gca()
y = ax.lines[0].get_ydata()

def find_nearest(array,value):
    idx = (np.abs(array-value)).argmin()
    return idx

y_low = y[find_nearest(x, x_lims[0])]
y_high = y[find_nearest(x, x_lims[1])]
ax.set_ylim(y_low, y_high)

plt.tight_layout()
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...