# Certainly logarithmic axes are supported in PyX. By playing with
# partitioners and texters, you can easily change the base.
#
# It is left as an exercise to the reader to create a automatic
# partitioner for logarithmic axes with base 2.

import math
from pyx import *
from pyx.graph import axis

p = path.curve(0, 0, 3, 0, 1, 4, 4, 4)

log2parter = axis.parter.log([axis.parter.preexp([axis.tick.rational(1)], 4),
                              axis.parter.preexp([axis.tick.rational(1)], 2)])
log2texter = axis.texter.exponential(nomantissaexp=r"{2^{%s}}",
                                     mantissamax=axis.tick.rational(2))

c = canvas.canvas()
c.insert(axis.pathaxis(p, axis.log(min=1, max=1024)))
c.insert(axis.pathaxis(p.transformed(trafo.translate(4, 0)),
                       axis.log(min=1, max=1024, parter=log2parter)))
c.insert(axis.pathaxis(p.transformed(trafo.translate(8, 0)),
                       axis.log(min=1, max=1024, parter=log2parter,
                                texter=log2texter)))
c.writeEPSfile("log")
