Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将yaxis固定到位_Python_User Interface_Matplotlib_Pyqt_Scrollbar - Fatal编程技术网

Python 将yaxis固定到位

Python 将yaxis固定到位,python,user-interface,matplotlib,pyqt,scrollbar,Python,User Interface,Matplotlib,Pyqt,Scrollbar,下面是我编写/改编的一些代码,这些代码生成下面的输出: from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg impor

下面是我编写/改编的一些代码,这些代码生成下面的输出:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

import sys

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure

import matplotlib.pyplot as plt
import numpy as np


class LineBuilder:
    def __init__(self, ax):
        self.ax = ax
        self.on = 1
        self.lastline, = self.ax.plot([0],[0])
        self.cid = ax.figure.canvas.mpl_connect('pick_event', self)

    def __call__(self, event):
        self.on *=-1
        thisline = event.artist
        xdata = thisline.get_xdata()
        ydata = thisline.get_ydata()
        ind = event.ind
        print(xdata[ind])
        print('modified',xdata[ind][0])
        self.lastline.remove()
        self.lastline=self.ax.axvline(x=xdata[ind][0])
        self.ax.figure.canvas.draw()

class View(QGraphicsView):

    def __init__(self):
        super(View, self).__init__()

        self.initScene(5)

    def initScene(self,h):     

        self.scene = QGraphicsScene()
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        self.figure.subplots_adjust(left=0.03,right=1,bottom=.1,top=1,wspace=0, hspace=0)

        ax = self.figure.add_subplot(111)
        ax.set_xlim([0,1000])
        data = np.random.rand(1000)
        ax.plot(data, '-') 

        self.canvas.draw()
        self.setScene(self.scene)
        self.scene.addWidget(self.canvas)

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow,self).__init__()

        self.setGeometry(150, 150, 700, 550) 

        self.view = View()
        self.view.setGeometry(0,0,self.width()*2,500)
        self.view.canvas.setGeometry(0,0,self.width()*2,500)        

        self.setCentralWidget(self.view)

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()


我可以使用底部的滚动条查看整个图像。然而,当滚动时,我很快就看不到y轴标签。是否可以将它们固定在适当的位置,这样滚动条只改变X轴可见的部分(同时Y轴的记号和标签保持固定)?

与其在QGraphicsView中查看完整的图形,不如在窗口中添加一个
QScrollBar
,并将其连接到函数,更新图形内轴的xlim

import numpy as np
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure


class Fig(FigureCanvas):
    def __init__(self, *args,**kwargs):
        self.factor = kwargs.pop("factor", 2)
        FigureCanvas.__init__(self, Figure(), *args,**kwargs)
        self.plot()
        self.scroll = QScrollBar(Qt.Horizontal)
        self.scroll.actionTriggered.connect(self.updateFromScroll)

    def plot(self):
        self.ax = self.figure.add_subplot(111)
        data = np.random.rand(1000)
        self.ax.plot(data, '-')
        self.xmin,self.xmax = self.ax.get_xlim()
        self.ax.set_xlim(self.xmin, self.xmax/float(self.factor))


    def updateFromScroll(self, evt):
        v = self.scroll.value()
        a = [self.xmin, self.xmax/float(self.factor)]
        lim = a+v/100.*np.diff(a)[0]
        self.ax.set_xlim(lim)
        self.draw_idle()


class Window(QMainWindow):
    def __init__(self):


        QMainWindow.__init__(self)
        self.widget = QWidget()
        self.setCentralWidget(self.widget)
        self.widget.setLayout(QVBoxLayout())
        self.widget.layout().setContentsMargins(0,0,0,0)
        self.widget.layout().setSpacing(0)

        self.canvas = Fig()
        self.canvas.draw()


        self.nav = NavigationToolbar(self.canvas, self.widget)
        self.widget.layout().addWidget(self.nav)
        self.widget.layout().addWidget(self.canvas)
        self.widget.layout().addWidget(self.canvas.scroll)

        self.show()


qapp = QApplication([])
# pass the figure to the custom window
a = Window()
exit(qapp.exec_()) 

您不能使用QGraphicscene的滚动条来执行此操作。您需要实现一个滚动条,并将其连接到更新绘图限制的函数。太好了,谢谢!我能完全适应我的需要,非常感谢你的帮助