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

2024-09-30 01:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python项目,它输出几个Matplotlib图;每个图都包含几个图表。project每次运行启动大约15位数(windows)的问题,我无法减少。在

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

任何帮助都是非常感谢的。在

提前谢谢


解决方法

感谢@mobiusklein下面的评论,他建议了一个解决方法,将图导出为myltipagepdf文件,如here。在

关于上面提到的多页pdf示例的重要注意事项。在

我试过了,但是在matplotlib中使用乳胶时出现了一个错误。因为修复这个错误超出了这个问题的范围,所以我建议如果任何人发生这种情况,就设置plt.rc('text', usetex=False)而不是{}

我仍然希望,如果有人有其他的解决方案或解决办法,张贴它为他人的利益。在


Tags: 项目方法project图形matplotlibwindows错误图表
3条回答

我为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()

这也张贴在:https://github.com/superjax/plotWindow

希望这是你的应用程序的一个好的起点。在

选择用于matplotlib的后端控制每个图形的显示方式。有些后端只是将图形渲染到文件中,而其他后端如tkqt或{}后端在图形窗口中渲染图形。这些后端决定了那些GUI窗口有哪些功能。在

现有的后端不支持您要查找的选项卡式导航类型。其他人here使用Qt4实现了这一点。在

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

一些功能上相似的东西可以使用小部件实现。例如,提供一行按钮,每个“tab”对应一个按钮,并根据每个按钮重新绘制窗口的图形部分。在

相关问题 更多 >

    热门问题