Используя бэкэнд «Qt5Agg», предоставленный Matplotlib, я встраиваю живой граф в мой графический интерфейс PyQt5.Вот код, который определяет GUI и работу живого Графа.
import matplotlib
matplotlib.use('Qt5Agg')
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import random
import collections
import time
from PyQt5 import QtWidgets
class LiveGraphCanvas(FigureCanvas):
def __init__(self, parent=None, height=5, width=4, dpi=100):
fig = Figure(figsize=(height, width), dpi=dpi)
fig.set_tight_layout(True)
fig.patch.set_alpha(0.0)
self.axes = fig.add_subplot(111)
self.axes.set_xlabel("Data Points")
self.axes.set_ylabel("Trim width (um)")
self.axes.grid(True)
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
# Function which will later be defined by the child-class
def compute_initial_figure(self):
pass
class LiveGraphWidget(LiveGraphCanvas):
def __init__(self, max_points, *args, **kwargs):
LiveGraphCanvas.__init__(self, *args, **kwargs)
self.data_length = max_points
self.data_points = collections.deque([0 for i in range(self.data_length)], maxlen=self.data_length)
def compute_initial_figure(self):
self.axes.plot([i for i in range(0, self.data_length)], [random.randint(1000, 6000) for i in range(0, self.data_length)], 'r')
def update_figure(self, data_point):
start_time = time.time()
self.data_points.append(data_point)
self.axes.cla()
self.axes.plot(self.data_points, 'r')
self.axes.set_xlabel("Data Points")
self.axes.set_ylabel("Trim width (um)")
self.axes.grid(True)
self.draw()
print ("Plot Update Time (ms): ", (time.time() - start_time)*1000)
Затем я создаю объект класса LiveGraphWidget и добавляю его в QVBoxLayout в моем основном классе.Мне нужен прозрачный холст за графиком, поэтому я устанавливаю альфа-прозрачность на 0 в классе LiveGraphCanvas.В Windows 10 график отображается правильно в соответствии с установленным альфа-значением, как показано ниже:

Однако в Ubuntu 18.04 альфа-параметр неработа, и я получаю уродливый белый фон за моим графиком:

(Пожалуйста, игнорируйте разницу цветового оттенка и формы между двумя скриншотами, так как обабыли взяты с другим программным обеспечением)
Что может быть причиной того, что прозрачность не работает должным образом?Это связано с внутренним ограничением графического интерфейса Ubuntu или с тем, что Matplotlib не предназначен для этой платформы?