pyqt5, matplotlib2 и устаревание осей.держать
На основе демонстрационного кода из https://gist.github.com/pklaus/3e16982d952969eb8a9a для встраивания графов matplotlib в графический интерфейс qt у меня есть следующий код:
# https://gist.github.com/pklaus/3e16982d952969eb8a9a
class MatplotlibCanvas(FigureCanvas):
"""Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
def __init__(self, mystacker, spectrum_id, parent=None, width=5, height=4, dpi=100):
self.stacker = mystacker
self.spectrum_id = spectrum_id
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
# We want the axes cleared every time plot() is called
self.axes.hold(False)
self.compute_initial_figure()
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
def compute_initial_figure(self):
spectrumplot.plot_spectrum(self.stacker, self.spectrum_id, self.axes)
Но с новой версией matplotlib 2, я получаю следующее предупреждение:
MatplotlibDeprecationWarning: axes.hold is deprecated.
See the API Changes document (http://matplotlib.org/api/api_changes.html) for more details.
Http://matplotlib.org/api/api_changes.html говорит
Аргумент ключевого слова hold и все функции и методы, связанные с ним его не рекомендуется использовать вместе с Осей‘.держите вход rcParams. То поведение должно соответствовать умолчанию=истинное состояние, что уже давно на месте. Вместо использования функции или ключевого слова аргумент (hold=False) чтобы изменить это поведение, явно очистите оси или рисунок по мере необходимости перед последующими командами построения графика.
Каковы были бы правильные призывы "явно очистить оси или фигуру по мере необходимости" в моем случае?
1 ответ:
Из приведенного кода не ясно, в какой момент вам действительно понадобится
hold(False)
.В документации говорится, что вы должны очистить оси явно, Если вам это нужно, а не полагаться на какой-то автоматический зазор. То есть используйте
self.axes.clear()
в любой точке, которую вы хотите очистить от осей и удалить ее содержимое. Действительно ли вам нужно очистить оси, зависит от вашего случая использования. Обычно обновление художников в осях является гораздо более чистым способом, чем очистка осей и воссоздание работники искусства.(Возможно, вы захотите обновить свой вопрос, чтобы включить дополнительную информацию о том, что именно вы делаете, чтобы кто-то знал, в какой момент вам это понадобится.)