# Multi demo

    import numpy as np
    from qtpy.QtCore import Qt
    from qtpy.QtGui import QPen
    from qtpy.QtWidgets import QGridLayout, QWidget

    from qwt import QwtPlot, QwtPlotCurve
    from qwt.tests import utils

    def drange(start, stop, step):
        start, stop, step = float(start), float(stop), float(step)
        size = int(round((stop - start) / step))
        result = [start] * size
        for i in range(size):
            result[i] += i * step
        return result

    def lorentzian(x):
        return 1.0 / (1.0 + (x - 5.0) ** 2)

    class MultiDemo(QWidget):
        def __init__(self, *args):
            QWidget.__init__(self, *args)
            layout = QGridLayout(self)
            # try to create a plot for SciPy arrays

            # make a curve and copy the data
            numpy_curve = QwtPlotCurve("y = lorentzian(x)")
            x = np.arange(0.0, 10.0, 0.01)
            y = lorentzian(x)
            numpy_curve.setData(x, y)
            # here, we know we can plot NumPy arrays
            numpy_plot = QwtPlot(self)
            numpy_plot.setTitle("numpy array")
            numpy_plot.setCanvasBackground(Qt.white)
            numpy_plot.plotLayout().setCanvasMargin(0)
            numpy_plot.plotLayout().setAlignCanvasToScales(True)
            # insert a curve and make it red
            numpy_curve.attach(numpy_plot)
            numpy_curve.setPen(QPen(Qt.red))
            layout.addWidget(numpy_plot, 0, 0)
            numpy_plot.replot()

            # create a plot widget for lists of Python floats
            list_plot = QwtPlot(self)
            list_plot.setTitle("Python list")
            list_plot.setCanvasBackground(Qt.white)
            list_plot.plotLayout().setCanvasMargin(0)
            list_plot.plotLayout().setAlignCanvasToScales(True)
            x = drange(0.0, 10.0, 0.01)
            y = [lorentzian(item) for item in x]
            # insert a curve, make it red and copy the lists
            list_curve = QwtPlotCurve("y = lorentzian(x)")
            list_curve.attach(list_plot)
            list_curve.setPen(QPen(Qt.red))
            list_curve.setData(x, y)
            layout.addWidget(list_plot, 0, 1)
            list_plot.replot()

    def test_multidemo():
        """Multiple plot demo"""
        utils.test_widget(MultiDemo, size=(400, 300))

    if __name__ == "__main__":
        test_multidemo()