I used an example for myself.I'm able to add scroll and slider.
The slider reacts to its impact. Cannot zoom in and then scroll the graph along the axis. There is a good example of how to do this in the chart " matplotlib"
But, I want to do everything in pyqt5. I cannot find a similar function "set_x lim" in pyqt5.
Ideally I want to get a graph with the ability to zoom, scroll.
Here is the main part of the code that managed to do:
ui = QMainWindow()
central_widget = QWidget()
vbox=QtWidgets.QVBoxLayout(central_widget)
Scroll = QScrollBar(Qt.Horizontal, central_widget)
Slider = QSlider(Qt.Horizontal, central_widget)
Slider.setRange(1, 100)
chartview = QChartView(chart, central_widget)
vbox.addWidget(chartview)
vbox.addWidget(Slider)
vbox.addWidget(Scroll)
def scale():
    step=Slider.value()/100
    print(step)
    update()
def update(evt=None):
    r = Scroll.value() / ((1 + step) * 100)
    #????????????????????
    print(r)
Slider.actionTriggered.connect(scale)
Scroll.actionTriggered.connect(update)
ui.setGeometry(70, 70, 400, 300)
ui.setCentralWidget(central_widget)
ui.show()
sys.exit(app.exec_())
This is how I did in pyqt5+matplotlib, based on the example:
class ScrollableWindow(QtWidgets.QMainWindow):
    def __init__(self, fig, ax, step=0.1):
        plt.close("all")
        self.qapp = QtWidgets.QApplication([])
        QtWidgets.QMainWindow.__init__(self)
        self.widget = QtWidgets.QWidget()
        self.setCentralWidget(self.widget)
        self.vbox=QtWidgets.QVBoxLayout(self.widget)
        self.gbox = QtWidgets.QHBoxLayout(self.widget)
        self.vkl = 1
        self.ln=0
        self.ln1 = 0
        self.step = step
        self.fig = fig
        self.ax = ax
        self.canvas = FigureCanvas(self.fig)
        self.canvas.draw()
        self.scroll = QtWidgets.QScrollBar(QtCore.Qt.Horizontal)
        self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        self.slider.setRange(1, 100)
        self.setupSlider()
        self.nav = NavigationToolbar(self.canvas, self.widget)
        self.vbox.addWidget(self.canvas)
        self.vbox.addWidget(self.scroll)
        self.gbox.addWidget(self.slider)
        self.gbox.addWidget(self.nav)
        self.gbox.addStretch(1)
        self.vbox.addLayout(self.gbox)
        self.setLayout(self.vbox)
        self.canvas.draw()
        self.show()
        self.qapp.exec_()
    def scale(self):
        self.step = self.slider.sliderPosition()/100.0
        self.update()
    def setupSlider(self):
        self.lims = np.array(self.ax.get_xlim())
        self.scroll.setPageStep(self.step * 100)#ax.get_xlim() 
        self.scroll.actionTriggered.connect(self.update)
        self.slider.actionTriggered.connect(self.scale)
        self.update()
    def update(self, evt=None):
        r = self.scroll.value() / ((1 + self.step) * 100)
        l1 = self.lims[0] + r * np.diff(self.lims)
        l2 = l1 + np.diff(self.lims) * self.step
        self.ax.set_xlim(l1, l2) # Show only this section of the x-axis coordinate
        if l1>0 and l2>0 and l2<(len(z)-1): # auto height chart
            xmin = np.amin(z[int(l1):int(l2)])
            xmax = np.amax(z[int(l1):int(l2)])
            self.ax.set_ylim([xmin, xmax])
        self.fig.canvas.draw_idle()
x = pd.read_csv('file.txt',
                    index_col='DATE',
                    parse_dates=True,
                    infer_datetime_format=True)
z = x.iloc[:, 3].values
N = len(z)
ind = np.arange(N)
fig, ax = plt.subplots()
ax.plot(ind, z)
a = ScrollableWindow(fig,ax)

