PyX — Example: graphs/components.py

0.4 KB
52.4 KB
54.4 KB
26.8 KB
31.5 KB

Shortcut for accessing graph-component attributes

components.png
from math import pi
from pyx import *
from pyx.graph import axis

g = graph.graphxy(width=10,
                  x_min=-4*pi, x_max=4*pi,
                  x_painter_gridattrs=[], x_divisor=pi, x_texter=axis.texter.rational(suffix=r"\pi"),
                  y_painter_gridattrs=[attr.changelist([style.linestyle.dashed, None])])

g.plot(graph.data.function("y(x)=sin(x)/x", points=200))

g.writeEPSfile()
g.writePDFfile()
g.writeSVGfile()

Description

Changing attributes of graphs requires one to set attributes of various graph components. In order to simplify this, PyX provides a shortcut in the constructors of these components. A simple example is the following code snippet, which turns on the x-axis grid in a graph:

graph.graphxy(x=graph.axis.lin(painter=graph.axis.painter.regular(gridattrs=[])))

The same effect can be obtained by the much shorter version

graph.graphxy(x_painter_gridattrs=[])

Here, the hierarchy of components used in the graphxy constructor is indicated by underscores. The part before the first underscore denotes the axes to be modified. In this example, this is the x-axis. The second part defines the component of this axis which should be changed. Here, this is the axis painter. Note that the base for this change is the x-axis of the graphxy, which in the present case is the default value graph.axis.lin. Finally, the third part defines which attribute of the component should be set. In the example, we enable the grid by setting gridattrs to a value different from None. Again, this change assumes that the default painter graph.axis.painter.regular is used.

If you want to replace a component, you have to set it explicitly. Suppose we want to have a log with a grid. This can be achieved by the following code:

graph.graphxy(x=graph.axis.log(painter=graph.axis.painter.regular(gridattrs=[])))

The same effect can be obtained by the shorter version

graph.graphxy(x=graph.axis.log(), x_painter_gridattrs=[])

or alternatively

graph.graphxy(x=graph.axis.log(painter_gridattrs=[]))

This example demonstrates this shorter form of graph-component attributes setting and produces the same result as the example Drawing a graph with grid lines.