#python #matplotlib #pyqt5 #pyside2
#python #matplotlib #pyqt5 #pyside2
Вопрос:
Я пытаюсь создать 2 фигуры графика, размер которых можно автоматически изменять с помощью виджета PyQt5 / PySide2 QSplitter. Однако, когда я сжимаю графики, их заголовок и метки оси x перекрываются, как показано ниже. Он выглядит сломанным. Кто-нибудь знает лучшие приемы для решения этой проблемы?
Вот мой пример кода
import numpy as np
from PySide2 import QtWidgets, QtCore
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
import matplotlib
matplotlib.use('Qt5Agg')
class MyChart(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
canvas1 = FigureCanvasQTAgg(Figure(figsize=(20,12)))
ax1 = canvas1.figure.add_subplot(111)
ax1.plot(np.sin(np.linspace(0, 4, 1000)))
ax1.set_title('Chart 1')
canvas2 = FigureCanvasQTAgg(Figure(figsize=(20,12)))
ax2 = canvas2.figure.add_subplot(111)
ax2.plot(np.sin(5 * np.linspace(0, 4, 1000)))
ax2.set_title('Chart 2')
splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
splitter.addWidget(canvas1)
splitter.addWidget(canvas2)
self.setCentralWidget(splitter)
self.show()
if __name__ == '__main__':
app = QtWidgets.QApplication([])
w = MyChart()
app.exec_()
Ответ №1:
Благодаря Джоди с форума matplotlib решение оказалось намного проще, чем я думал. Просто включите constrained_layout=True
в конструктор figure и все!! Вот результат.
...
canvas1 = FigureCanvasQTAgg(Figure(figsize=(20,12), constrained_layout=True))
...
canvas2 = FigureCanvasQTAgg(Figure(figsize=(20,12), constrained_layout=True))
...