matplotlib 图形的选项卡式窗口,可能吗?

Moh*_*esr 9 python plot matplotlib tabbed multipage

我有一个输出多个 Matplotlib 图形的 python 项目;每个图都包含几个图表。项目每次运行启动大约 15 个数字(窗口)的问题,我无法减少。

是否可以将所有这些图形(窗口)连接到一个选项卡式窗口,以便每个选项卡代表一个图形?

任何帮助深表感谢。

提前致谢


解决方法

由于下面他@mobiusklein意见提出一种解决方法,以数字输出为myltipage PDF文件如图所示这里

关于上面提到的多页 pdf 示例的重要说明

我试过了,但在 matplotlib 中使用 LaTeX 时出现错误。因为修复这个错误超出了这个问题的范围,所以我建议如果它发生在任何人身上,设置plt.rc('text', usetex=False)而不是usetex=True

我仍然希望如果有人有其他解决方案或解决方法来发布它以造福他人。

sup*_*jax 7

我为 matplotlib 编写了一个简单的包装器,它可以执行您所描述的操作。你需要pyqt5让它工作。

这是代码,您构建一个plotWindow对象并为其提供图形句柄。它将为每个图形创建一个新选项卡。


from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QTabWidget, QVBoxLayout
import matplotlib.pyplot as plt
import sys

class plotWindow():
    def __init__(self, parent=None):
        self.app = QApplication(sys.argv)
        self.MainWindow = QMainWindow()
        self.MainWindow.__init__()
        self.MainWindow.setWindowTitle("plot window")
        self.canvases = []
        self.figure_handles = []
        self.toolbar_handles = []
        self.tab_handles = []
        self.current_window = -1
        self.tabs = QTabWidget()
        self.MainWindow.setCentralWidget(self.tabs)
        self.MainWindow.resize(1280, 900)
        self.MainWindow.show()

    def addPlot(self, title, figure):
        new_tab = QWidget()
        layout = QVBoxLayout()
        new_tab.setLayout(layout)

        figure.subplots_adjust(left=0.05, right=0.99, bottom=0.05, top=0.91, wspace=0.2, hspace=0.2)
        new_canvas = FigureCanvas(figure)
        new_toolbar = NavigationToolbar(new_canvas, new_tab)

        layout.addWidget(new_canvas)
        layout.addWidget(new_toolbar)
        self.tabs.addTab(new_tab, title)

        self.toolbar_handles.append(new_toolbar)
        self.canvases.append(new_canvas)
        self.figure_handles.append(figure)
        self.tab_handles.append(new_tab)

    def show(self):
        self.app.exec_()

if __name__ == '__main__':
    import numpy as np

    pw = plotWindow()

    x = np.arange(0, 10, 0.001)

    f = plt.figure()
    ysin = np.sin(x)
    plt.plot(x, ysin, '--')
    pw.addPlot("sin", f)

    f = plt.figure()
    ycos = np.cos(x)
    plt.plot(x, ycos, '--')
    pw.addPlot("cos", f)
    pw.show()

Run Code Online (Sandbox Code Playgroud)

这也发布在:https : //github.com/superjax/plotWindow

希望这可以成为您应用程序的良好起点。


mob*_*ein 3

您选择使用的后端matplotlib控制每个图形的显示方式。有些后端仅将图形渲染到文件,而其他后端(例如tkqtgtk后端)则在图形窗口中渲染图形。这些后端决定了这些 GUI 窗口具有哪些功能。

现有后端不支持您正在寻找的选项卡式导航类型。这里其他人使用 Qt4 实现了这个。

您还可以尝试使用 PDF 或 HTML 编写自己的报告文件,这可以让您更轻松地使用更简单的库编写更复杂的图像排列。