【问题标题】:How to adjust the size of a plot in PyQt?如何在 PyQt 中调整绘图的大小?
【发布时间】:2017-11-04 20:53:34
【问题描述】:

我找到了以下代码 here。我稍微减少了代码以使其更适合我的问题。

import sys
import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5 import QtCore
from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject
from PyQt5.QtWidgets import *
from numpy import arange, sin, pi
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

class MyMplCanvas(FigureCanvas):
    """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
    def __init__(self, parent=None, width = 5, height = 3, dpi=100):

        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)

        self.compute_initial_figure()
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)

        FigureCanvas.updateGeometry(self)

class MyStaticMplCanvas(MyMplCanvas):
    """Simple canvas with a sine plot."""
    def compute_initial_figure(self):
        t = arange(0.0, 3.0, 0.01)
        s = sin(2*pi*t)
        self.axes.plot(t, s)
        self.axes.set_ylabel('label2')
        self.axes.set_xlabel('label1')
        self.axes.grid(True)

class ApplicationWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumWidth(800)
        self.setMinimumHeight(300)
        self.setMaximumWidth(800)
        self.setMaximumHeight(300)

        self.main_widget = QWidget(self)

        self.sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)

        l = QVBoxLayout(self.main_widget)
        l.addWidget(self.sc)
        self.setCentralWidget(self.main_widget)

if __name__ == '__main__':
    app = QApplication(sys.argv)

    aw = ApplicationWindow()
    aw.setWindowTitle("PyQt5 Matplotlib Example")
    aw.show()
    app.exec_()

问题是绘图原则上显示正确,但 x-label 丢失(掉出显示的框架)。那么,如何调整轴对象的大小以使 PyQt 也显示 x-label

我知道图形大小可以通过“figsize”参数进行调整。但到目前为止,我在图中找不到类似的图表命令。

另外,我听说过 matplotlib 的 gridspec 包,但我认为它不适合在这里,因为我只有一个绘图要显示。

【问题讨论】:

  • 这里有两件事混合在一起。您有一个带有刻度标签和 xlabel 的轴。这坐在一个人物里面。该图嵌入在 PyQt 中。您想更改图形以适应 PyQt 小部件的尺寸,还是要更改轴以适应图形内部?
  • 后一种,所以要改变轴以适应图形内部

标签: python matplotlib plot label pyqt5


【解决方案1】:

您可能想阅读thight layout guide

所以一种选择是调用

self.fig.tight_layout()

你也可以adjust the subplot parameters

self.fig.subplots_adjust(0.2, 0.2, 0.8, 0.8) # left,bottom,right,top 

你也可以set the position的轴

self.axes.set_position([0.2, 0.2, 0.6, 0.6]) # left,bottom,width,height 

【讨论】:

    【解决方案2】:

    我解决了这个问题,结果发现可以通过位置参数简单地调整轴。

    self.ax = self.fig.add_subplot(111, position=[0.15, 0.15, 0.75, 0.75])
    

    【讨论】:

      猜你喜欢
      • 2019-01-16
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 2012-07-27
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多