天天看點

python繪圖滾動條_python繪圖滾動條_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)

在此處輸入圖檔說明

這是PyQt5的版本。

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)

雖然此答案顯示了一種滾動完整圖形的方法