2
我想知道是否有方法在包含多个子插槽(sublot2grid
)的matplotlib显示页面(plt.show
)上放置滚动条(水平或垂直)。目前,我找到的唯一解决方案是让子图非常小,这根本不是很优雅。Matplotlib上的滚动条显示页面
我想知道是否有方法在包含多个子插槽(sublot2grid
)的matplotlib显示页面(plt.show
)上放置滚动条(水平或垂直)。目前,我找到的唯一解决方案是让子图非常小,这根本不是很优雅。Matplotlib上的滚动条显示页面
显示matplotlib图形的窗口没有添加滚动条的选项。它会自动调整自己的大小。相反,如果调整大小,该数字也将调整大小。
一个选项是建立一个自定义窗口它具有这种能力。为此,可以使用PyQt。下面给出一个例子,其中不是调用plt.show()
,而是使用图形调用自定义类作为参数。数字大小应该先设置为图fig
,并且该自定义类不会更改它。相反,它会将图形放入带滚动条的画布中,以便该图保留原始大小并可在Qt窗口中滚动。你不需要处理课堂内的细节,而只需要在剧本结尾处调用。
这个例子用于PyQt4,参见下面的PyQt5例子。
import matplotlib.pyplot as plt
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
class ScrollableWindow(QtGui.QMainWindow):
def __init__(self, fig):
self.qapp = QtGui.QApplication([])
QtGui.QMainWindow.__init__(self)
self.widget = QtGui.QWidget()
self.setCentralWidget(self.widget)
self.widget.setLayout(QtGui.QVBoxLayout())
self.widget.layout().setContentsMargins(0,0,0,0)
self.widget.layout().setSpacing(0)
self.fig = fig
self.canvas = FigureCanvas(self.fig)
self.canvas.draw()
self.scroll = QtGui.QScrollArea(self.widget)
self.scroll.setWidget(self.canvas)
self.nav = NavigationToolbar(self.canvas, self.widget)
self.widget.layout().addWidget(self.nav)
self.widget.layout().addWidget(self.scroll)
self.show()
exit(self.qapp.exec_())
# create a figure and some subplots
fig, axes = plt.subplots(ncols=4, nrows=5, figsize=(16,16))
for ax in axes.flatten():
ax.plot([2,3,5,1])
# pass the figure to the custom window
a = ScrollableWindow(fig)
import matplotlib
# Make sure that we are using QT5
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from PyQt5 import QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
class ScrollableWindow(QtWidgets.QMainWindow):
def __init__(self, fig):
self.qapp = QtWidgets.QApplication([])
QtWidgets.QMainWindow.__init__(self)
self.widget = QtWidgets.QWidget()
self.setCentralWidget(self.widget)
self.widget.setLayout(QtWidgets.QVBoxLayout())
self.widget.layout().setContentsMargins(0,0,0,0)
self.widget.layout().setSpacing(0)
self.fig = fig
self.canvas = FigureCanvas(self.fig)
self.canvas.draw()
self.scroll = QtWidgets.QScrollArea(self.widget)
self.scroll.setWidget(self.canvas)
self.nav = NavigationToolbar(self.canvas, self.widget)
self.widget.layout().addWidget(self.nav)
self.widget.layout().addWidget(self.scroll)
self.show()
exit(self.qapp.exec_())
# create a figure and some subplots
fig, axes = plt.subplots(ncols=4, nrows=5, figsize=(16,16))
for ax in axes.flatten():
ax.plot([2,3,5,1])
# pass the figure to the custom window
a = ScrollableWindow(fig)
感谢的很多,这是我期待的^^ –
我有一个问题,当我关闭了Qt窗口回去Tkinter的接口,应用程序崩溃, –
什么是“回去的Tkinter界面“的意思? – ImportanceOfBeingErnest