Examples
--------

Curve example
^^^^^^^^^^^^^

Create a basic curve plotting widget:

* before creating any widget, a `QApplication` must be instantiated (that
  is a `Qt` internal requirement)::

    >>> import guidata
    >>> app = guidata.qapplication()

* that is mostly equivalent to the following (the only difference is that
  the :mod:`plotpy` helper function also installs the `Qt` translation
  corresponding to the system locale)::

    >>> from qtpy.QtWidgets import QApplication
    >>> app = QApplication([])

* now that a `QApplication` object exists, we may create the plotting
  widget using :py:class:`.PlotWidget` and :py:class:`.PlotOptions`::

    >>> from plotpy.plot import PlotWidget, PlotOptions
    >>> options = PlotOptions(title="Example", xlabel="X", ylabel="Y", type="curve")
    >>> plot = PlotWidget(options=options)

* ...or using the :py:class:`.PlotBuilder` (see :py:attr:`plotpy.builder.make`)::

    >>> from plotpy.builder import make
    >>> plot = make.widget(title="Example", xlabel="X", ylabel="Y", type="curve")

Create a curve item:

* from the associated plot item class (e.g. `ErrorBarCurveItem` to create
  a curve with error bars): the item properties are then assigned by creating
  the appropriate style parameters object (e.g. :py:class:`.styles.ErrorBarParam`)::

    >>> from plotpy.items import CurveItem
    >>> from plotpy.styles import CurveParam
    >>> param = CurveParam()
    >>> param.label = 'My curve'
    >>> curve = CurveItem(param)
    >>> curve.set_data(x, y)

* or using the :py:class:`.PlotBuilder` (see :py:attr:`plotpy.builder.make`)::

    >>> from plotpy.builder import make
    >>> curve = make.curve(x, y, title='My curve')

Attach the curve to the plotting widget::

    >>> plot.add_item(curve)

Display the plotting widget::

    >>> plot.show()
    >>> app.exec()

Image example
^^^^^^^^^^^^^

Create a basic image plotting widget (see also `Curve example`_),
using :py:class:`.PlotWidget` and :py:class:`.PlotOptions`::

    >>> import guidata
    >>> app = guidata.qapplication()
    >>> from plotpy.plot import PlotWidget, PlotOptions
    >>> plot = PlotWidget(options=PlotOptions(title="Example", type="image"))

...or using the :py:class:`.PlotBuilder` (see :py:attr:`plotpy.builder.make`)::

    >>> from plotpy.builder import make
    >>> plot = make.widget(title="Example", type="image")

Generate random data for testing purpose::

    >>> import numpy as np
    >>> data = np.random.rand(100, 100)

Create a simple image item:

* from the associated plot item class (e.g. `XYImageItem` to create
  an image with non-linear X/Y axes): the item properties are then
  assigned by creating the appropriate style parameters object
  (e.g. :py:class:`.styles.ImageParam`)::

    >>> from plotpy.items import ImageItem
    >>> from plotpy.styles import ImageParam
    >>> param = ImageParam()
    >>> param.label = 'My image'
    >>> image = ImageItem(param)
    >>> image.set_data(data)

* or using the :py:class:`.PlotBuilder` (see :py:attr:`plotpy.builder.make`)::

    >>> from plotpy.builder import make
    >>> image = make.image(data, title='My image')

Final steps (see also `Curve example`_)::

    >>> plot.add_item(image)
    >>> plot.show()
    >>> app.exec()

Shape example
^^^^^^^^^^^^^

A shape may be created:

* from the associated plot item class (e.g. `RectangleShape` to create a
  rectangle): the item properties are then assigned by creating the
  appropriate style parameters object (:py:class:`.styles.ShapeParam`)::

    >>> from plotpy.items import RectangleShape
    >>> from plotpy.styles import ShapeParam
    >>> param = ShapeParam()
    >>> param.title = 'My rectangle'
    >>> rect_item = RectangleShape(0., 2., 4., 0., param)

* or using the :py:class:`.PlotBuilder` (see :py:attr:`plotpy.builder.make`)::

    >>> from plotpy.builder import make
    >>> rect_item = make.rectangle(0., 2., 4., 0., title='My rectangle')

Annotation example
^^^^^^^^^^^^^^^^^^

An annotated shape may be created:

* from the associated plot item class (e.g. `AnnotatedCircle` to
  create an annotated circle): the item properties are then assigned
  by creating the appropriate style parameters object
  (:py:class:`.styles.AnnotationParam`)::

    >>> from plotpy.items import AnnotatedCircle
    >>> from plotpy.styles import AnnotationParam
    >>> param = AnnotationParam()
    >>> param.title = 'My circle'
    >>> circle_item = AnnotatedCircle(0., 2., 4., 0., param)

* or using the :py:class:`.PlotBuilder` (see :py:attr:`plotpy.builder.make`)::

    >>> from plotpy.builder import make
    >>> circle_item = make.annotated_circle(0., 2., 4., 0., title='My circle')
