«Слепые зоны» на графике при использовании FuncAnimation () с blit = True в MA C OS - PullRequest
0 голосов
/ 05 мая 2020

Я делаю небольшую программу для построения некоторого случайного значения с использованием PyQt и FuncAnimation () (из matplotlib). Я запустил его на ОС MA C и понял, что когда я устанавливаю параметр blit = True для FuncAnimation (), на сгенерированном графике появляются некоторые «слепые зоны» (внизу и справа), и я не может видеть точки на полях этого графика. Вот гифка: gif_MAC_OS .

Однако, похоже, это происходит только в ОС MA C. Когда я запускаю тот же код в Windows или Linux, график имеет ожидаемый вид. Вот второй гиф: gif_ Windows

А вот код:

# In this program I am trying to call FuncAnimation when it is placed in a function

import sys
import os
from datetime import datetime
import matplotlib
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QSizePolicy, QWidget
import numpy as np
import random
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib.animation import FuncAnimation

class MyMplCanvas(FigureCanvas):
    def __init__(self, parent=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)

        self.ax = fig.add_subplot(1,1,1)

        FigureCanvas.__init__(self, fig)
        self.setParent(parent)
        FigureCanvas.setSizePolicy(self,
                                   QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

class ApplicationWindow(QtWidgets.QMainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.main_widget = QtWidgets.QWidget(self)
        self.canvas =  MyMplCanvas( self.main_widget,width=6, height=6, dpi=100) 

        self.xdata = []
        self.ydata = []

        vbox = QtWidgets.QVBoxLayout(self.main_widget)

        self.start_button = QtWidgets.QPushButton(text="START")

        # We call the start_func_animation method
        self.start_button.clicked.connect(self.start_func_animation)

        vbox.addWidget(self.canvas)
        vbox.addWidget(self.start_button)
        self.setLayout(vbox)
        self.main_widget.setFocus()
        self.setCentralWidget(self.main_widget)

        # We obtain the artist in a tupple: which is the best option for FuncAnimation, although a list will also work (see: TFG>Bibliografía>Pyhton>FuncAnimation>blitting)
        (self.line,) = self.canvas.ax.plot_date(self.xdata, self.ydata, linestyle='-', linewidth=0.6, markersize=2.5)


    def start_func_animation(self):

        self.ani = FuncAnimation(self.canvas.figure, self.update_line, interval=1000, blit=True)


    def update_line(self, i):
        self.xdata.append(datetime.now())
        self.ydata.append(1+np.random.randint(-3,3))

        self.line.set_data(self.xdata, self.ydata)
        self.canvas.figure.gca().relim()
        self.canvas.figure.gca().autoscale_view()
        self.canvas.ax.tick_params(axis='x', rotation=50)

        return self.line,


if __name__ == "__main__":
    App = QApplication(sys.argv)
    aw = ApplicationWindow()
    aw.show()
    sys.exit(App.exec_())

Кто-нибудь знает, почему в ОС MA C появляется такая неожиданная результат? Кто-нибудь знает решение?

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