========
Examples
========
Data series
===========
Simple pairs
------------
.. literalinclude:: ../examples/simple_pairs.py
:language: python
.. figure:: ../examples/charts/simple_pairs.svg
Table from csv.reader
---------------------
Sequence row data, such as is returned by :func:`csv.reader` can be accessed by specifying the indices of the columns containing the :code:`x` and :code:`y` values.
Note that leather does not automatically convert numerical strings, such as those stored in a CSV. If you want that you'll need to use a smarter table reader, such as `agate `_
.. literalinclude:: ../examples/csv_reader.py
:language: python
.. figure:: ../examples/charts/csv_reader.svg
Table from csv.DictReader
-------------------------
Dict row data, such as is returned by :class:`csv.DictReader` can be accessed by specifying the indices of the columns containing the :code:`x` and :code:`y` values.
See previous example for note on strings from CSVs.
.. literalinclude:: ../examples/csv_dict_reader.py
:language: python
.. figure:: ../examples/charts/csv_dict_reader.svg
Custom data
-----------
Completely custom data formats are also supported via accessor functions.
.. literalinclude:: ../examples/custom_data.py
:language: python
.. figure:: ../examples/charts/custom_data.svg
Multiple series
---------------
Multiple data series can be displayed on a single chart so long as they all use the same type of :class:`.Scale`.
.. literalinclude:: ../examples/multiple_series.py
:language: python
.. figure:: ../examples/charts/multiple_series.svg
Shapes
======
Bars
----
.. literalinclude:: ../examples/bars.py
:language: python
.. figure:: ../examples/charts/bars.svg
Columns
-------
.. literalinclude:: ../examples/columns.py
:language: python
.. figure:: ../examples/charts/columns.svg
Dots
----
.. literalinclude:: ../examples/dots.py
:language: python
.. figure:: ../examples/charts/dots.svg
Lines
-----
.. literalinclude:: ../examples/lines.py
:language: python
.. figure:: ../examples/charts/lines.svg
Mixing shapes
-------------
You can mix different shapes for different series on the same chart.
.. literalinclude:: ../examples/mixed_shapes.py
:language: python
.. figure:: ../examples/charts/mixed_shapes.svg
Scales
======
Linear
------
When using numerical data :class:`.Linear` scales are created automatically and by default. You may override the domain by adding a scale manually.
.. literalinclude:: ../examples/linear.py
:language: python
.. figure:: ../examples/charts/linear.svg
Ordinal
-------
When using text data :class:`.Ordinal` scales are created automatically and by default. It is generally not useful to override these defaults.
.. literalinclude:: ../examples/ordinal.py
:language: python
.. figure:: ../examples/charts/ordinal.svg
Temporal
--------
When using date/time data :class:`.Temporal` scales are created automatically and by default. You may override the domain by adding a scale manually.
.. literalinclude:: ../examples/temporal.py
:language: python
.. figure:: ../examples/charts/temporal.svg
Axes
====
Changing tick values
--------------------
You can change the list of ticks that are displayed using :meth:`.Chart.add_x_axis` and :meth:`.Chart.add_y_axis` methods. This will not adjust automatically adjust the scale, so it is possible to pick tick values that are not displayed.
.. literalinclude:: ../examples/ticks.py
:language: python
.. figure:: ../examples/charts/ticks.svg
Customizing tick format
-----------------------
You can provide a tick formatter method to change how ticks are displayed using the :meth:`.Chart.add_x_axis` and :meth:`.Chart.add_y_axis` methods.
.. literalinclude:: ../examples/tick_format.py
:language: python
.. figure:: ../examples/charts/tick_format.svg
Styling
=======
Changing theme values
---------------------
Chart styles are set using a dead simple :mod:`.theme` system. Leather is meant for making quick and dirty charts. It is neither expected nor recommended for user's to customize these styles.
.. literalinclude:: ../examples/theme.py
:language: python
.. figure:: ../examples/charts/theme.svg
Changing series colors
----------------------
More practically, individual default :class:`.Series` colors can be overridden when they are created.
.. literalinclude:: ../examples/series_color.py
:language: python
.. figure:: ../examples/charts/series_color.svg
Styling data based on value
---------------------------
Style attributes of individual data points can be set by value using a :func:`.style_function`.
.. literalinclude:: ../examples/colorized_dots.py
:language: python
.. figure:: ../examples/charts/colorized_dots.svg
Creating dashed lines
---------------------
When using :meth:`.Chart.add_line`, you can set the `stroke_dasharray property `_.
.. literalinclude:: ../examples/lines_dashes.py
:language: python
.. figure:: ../examples/charts/lines_dashes.svg
Chart grids
===========
With mixed scales
-----------------
You can add charts of completely different types to a single graphic by using :class:`.Grid`.
.. literalinclude:: ../examples/grid.py
:language: python
.. figure:: ../examples/charts/grid.svg
With consistent scales
----------------------
A grid of charts can automatically be synchronized to a consistent view using :class:`.Lattice`.
.. literalinclude:: ../examples/lattice.py
:language: python
.. figure:: ../examples/charts/lattice.svg