3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-27 06:43:40 +01:00
dft_tools/doc/reference/python/data_analysis/plotting/plotting.rst
Olivier Parcollet f2c7d449cc First commit : triqs libs version 1.0 alpha1
for earlier commits, see TRIQS0.x repository.
2013-07-17 19:24:07 +02:00

106 lines
3.4 KiB
ReStructuredText

.. index:: matplotlib plotter
.. module:: pytriqs.plot
.. _plotting:
Plotting TRIQS objects
################################
TRIQS objects can be easily plotted, for example with the standard python plot toolkit `matplotlib
<http://matplotlib.sourceforge.net/>`_.
In fact, TRIQS introduces a simple :ref:`plot protocol <plot_protocol>`, which allows to plot
objects which have a graphical representation.
A thin layer above matplotlib
=================================
TRIQS defines a function *oplot*, similar to the standard matplotlib pyplot.plot function,
but that can plot TRIQS objects (in fact *any* object, see below).
We can reproduce the first example of the Green function tutorial :
.. plot:: reference/python/green/example.py
:include-source:
:scale: 70
The *oplot* function takes :
* as arguments any object that implements the :ref:`plot protocol <plot_protocol>`,
for example Green function, Density of state : in fact any object where plotting is reasonable and has been defined ...
* string formats following objects, as in regular matplotlib, like in the example above.
* regular options of the matplotlib *pyplot.plot* function
* options specific to the object to be plotted : here the `x_window` tells the Green function to plot itself in a reduced window of :math:`\omega_n`.
Multiple panels figures
=================================
`Only valid for matplotlib v>=1.0`.
While one can use the regular matplotlib subfigure to make multi-panel figures,
subplots makes it a bit more pythonic :
.. plot:: reference/python/data_analysis/plotting/example.py
:include-source:
:scale: 70
.. index:: plotting protocol
.. _plot_protocol:
Plot protocol [Advanced]
===========================
What do we need to implement to plot an object ?
Simply a little `_plot_` method that reduces the object to a set of curves.
This section describes the conventions on this function.
As soon as an object defines this method, it can be plotted by the `oplot` function of `pytriqs.plot.mpl_interface`.
See example below.
.. function:: _plot_( OptionsDict )
* OptionDict is a dictionnary of options.
.. warning::
* The method _plot_ must consume the options it uses (using e.g. the pop method of dict).
* Other options will be passed to matplotlib, so leaving spurious options here will lead to errors.
:rtype: a list of dict representing one curve each. These dict must have the following fields:
* *xdata* : A 1-dimensional numpy array describing the x-axis points
* *ydata* : A 1-dimensional numpy array describing the y-axis points
* *label* : Label of the curve for the legend of the graph
* *type* : a string : currently "XY" [ optional]
and optionally :
* *xlabel* : a label for the x axis. The last object plotted will overrule the previous ones.
* *ylabel* : a label for the y axis. The last object plotted will overrule the previous ones.
Example
-------
Here's a simple example to illustrate the protocol:
.. plot:: reference/python/data_analysis/plotting/myobject.py
:include-source:
:scale: 70
Example with options
---------------------------
A little bit more complex, with options.
Note the use of the `pop method of dict <http://docs.python.org/library/stdtypes.html#dict>`_,
which returns and removes the entry from the dict (with a default value).
.. plot:: reference/python/data_analysis/plotting/myobject2.py
:include-source:
:scale: 70