Python 如何调用NavigationToolbar2QT';控制台中的紧凑布局命令?
我在滚动区域中弹出的一组图形上使用Matplotlibs NavigationToolbar,但轴标签在小部件区域中显示不紧密。我使用plt.tight_layout()来清理轴,但y标签仍然没有拉紧,我必须将滚动区域小部件扩展到很宽的范围才能在GUI中看到它们,或者使用NavigationToolbar的configure_子窗口(3行带正方形)按钮并按下“tight layout”按钮,使y标签移动到清晰视图中,并随着小部件更自然地调整大小而移动。当我有很多图形同时加载到滚动区域时,问题就来了,我必须为每个单独的图形浏览菜单,这可能会很麻烦 我的问题是:如何在创建图形时从导航工具栏中自动激活紧密布局?我不知道怎么直接打电话给它。我查看了NavigationToolbar上另一个问题中的“我找到了”链接,看到“配置子图”菜单按钮调用了另一个类子图ToolQt,但我无法像导入此包中的NavigationToolbar2QT和FigureCanvasQTAgg类那样直接导入它,因此我无法像那样直接调用它。我试着打电话Python 如何调用NavigationToolbar2QT';控制台中的紧凑布局命令?,python,matplotlib,pyqt5,toolbar,Python,Matplotlib,Pyqt5,Toolbar,我在滚动区域中弹出的一组图形上使用Matplotlibs NavigationToolbar,但轴标签在小部件区域中显示不紧密。我使用plt.tight_layout()来清理轴,但y标签仍然没有拉紧,我必须将滚动区域小部件扩展到很宽的范围才能在GUI中看到它们,或者使用NavigationToolbar的configure_子窗口(3行带正方形)按钮并按下“tight layout”按钮,使y标签移动到清晰视图中,并随着小部件更自然地调整大小而移动。当我有很多图形同时加载到滚动区域时,问题就来
toolbar.configure_subplots._tight_layout
但工具栏无法识别configure_子窗口。
这是我的相关代码:
import pandas as pd
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
#from matplotlib.backends.backend_qt5agg import SubplotToolQt
import matplotlib.pyplot as plt
Class MainWindow(object):
defsetupUI(self,blahblah):
blah blah
def populate_graphs(self):
self.widgets = []
self.graph_widget = QtWidgets.QWidget()
self.scroll_layout = QtWidgets.QVBoxLayout()
self.graph_widget.setLayout(self.scroll_layout)
lay = QtWidgets.QVBoxLayout()
self.scroll_layout.addLayout(lay)
self.scroll_layout.addStretch()
df = self.readDataTable(self.datatable)
if not df.empty:
plt.close('all')
sample_name = df.columns
sd_df = self.smooth(self.smooth(self.smooth(self.deriv(df))))
for i in range(len(df.columns)):
if i > 0:
self.canvaswidget = GraphWidget(sample_name[i])
self.canvaswidget.setMinimumSize(250, 400)
self.widgets.append(self.canvaswidget)
lay.addWidget(self.canvaswidget)
plt.subplot(2,1,1)
plt.plot(df.iloc[:,0],df.iloc[:,i])
plt.title(sample_name[i])
plt.xlabel(sample_name[0])
plt.ylabel("OD")
plt.subplot(2,1,2)
plt.plot(sd_df.iloc[:,0],sd_df.iloc[:,i])
plt.title("{0} Rate".format(sample_name[i]))
plt.xlabel(sample_name[0])
plt.ylabel("OD/min")
plt.tight_layout()
self.graphdisplay.setWidget(self.graph_widget)
self.graphdisplay.setContextMenuPolicy(Qt.CustomContextMenu)
self.graphdisplay.customContextMenuRequested.connect(self.graphMenuEvent)
#Tell it to ignore the max figure open message
plt.rcParams.update({'figure.max_open_warning': 0})
class GraphWidget(QtWidgets.QWidget):
def __init__(self, name, *args, **kwargs):
super(GraphWidget, self).__init__(*args, **kwargs)
self.name = name
self.figure = plt.figure()
self.axes = self.figure.add_subplot(111)
self.canvas = FigureCanvas(self.figure)
self.toolbar = NavigationToolbar(self.canvas, self)
self.graph_layout = QtWidgets.QVBoxLayout()
self.name_label = QtWidgets.QLabel(self.name)
self.graph_layout.addWidget(self.name_label)
self.graph_layout.addWidget(self.toolbar)
self.graph_layout.addWidget(self.canvas)
self.setLayout(self.graph_layout)