Moh*_*esr 9 python plot matplotlib tabbed multipage
我有一个输出多个 Matplotlib 图形的 python 项目;每个图都包含几个图表。项目每次运行启动大约 15 个数字(窗口)的问题,我无法减少。
是否可以将所有这些图形(窗口)连接到一个选项卡式窗口,以便每个选项卡代表一个图形?
任何帮助深表感谢。
提前致谢
解决方法
由于下面他@mobiusklein意见提出一种解决方法,以数字输出为myltipage PDF文件如图所示这里。
关于上面提到的多页 pdf 示例的重要说明。
我试过了,但在 matplotlib 中使用 LaTeX 时出现错误。因为修复这个错误超出了这个问题的范围,所以我建议如果它发生在任何人身上,设置plt.rc('text', usetex=False)而不是usetex=True
我仍然希望如果有人有其他解决方案或解决方法来发布它以造福他人。
我为 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
希望这可以成为您应用程序的良好起点。
| 归档时间: |
|
| 查看次数: |
7430 次 |
| 最近记录: |