From cd5e78d7a75056502ef098eb661caff1dfc60ddc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Wobst?= Date: Fri, 15 Sep 2006 16:09:42 +0000 Subject: [PATCH] extend the logarithmic parter to calculate automatic partitions for huge ranges git-svn-id: https://pyx.svn.sourceforge.net/svnroot/pyx/trunk/pyx@2853 069f4177-920e-0410-937b-c2a4a81bcd90 --- CHANGES | 2 ++ pyx/graph/axis/parter.py | 47 +++++++++++++++-------------------------------- 2 files changed, 17 insertions(+), 32 deletions(-) diff --git a/CHANGES b/CHANGES index d7691190..ee6bb799 100644 --- a/CHANGES +++ b/CHANGES @@ -95,6 +95,8 @@ TODO: - graph modules: - axis module: - painter: don't insert axis title twice (thanks to Tim Gray for reporting this problem) + - parter: extend the logarithmic parter to calculate automatic partitions for huge ranges + (TODO: documentation of the new autoexponent parameter) (suggested by Dominic Ford) - graph styles: - optional textdx/textdy columns to the text style added - arrowpos parameter to the arrow style added diff --git a/pyx/graph/axis/parter.py b/pyx/graph/axis/parter.py index e8b1902e..f01e73d6 100644 --- a/pyx/graph/axis/parter.py +++ b/pyx/graph/axis/parter.py @@ -199,10 +199,6 @@ class logarithmic(linear): """partitioner to create a single logarithmic parition""" # define some useful constants - pre1exp5 = preexp([tick.rational((1, 1))], 100000) - pre1exp4 = preexp([tick.rational((1, 1))], 10000) - pre1exp3 = preexp([tick.rational((1, 1))], 1000) - pre1exp2 = preexp([tick.rational((1, 1))], 100) pre1exp = preexp([tick.rational((1, 1))], 10) pre125exp = preexp([tick.rational((1, 1)), tick.rational((2, 1)), tick.rational((5, 1))], 10) pre1to9exp = preexp([tick.rational((x, 1)) for x in range(1, 10)], 10) @@ -279,48 +275,35 @@ class autologarithmic(logarithmic): ([logarithmic.pre1exp, # ticks logarithmic.pre1to9exp], # subticks - None), # labels like ticks - - ([logarithmic.pre1exp2, # ticks - logarithmic.pre1exp], # subticks - None), # labels like ticks - - ([logarithmic.pre1exp3, # ticks - logarithmic.pre1exp], # subticks - None), # labels like ticks - - ([logarithmic.pre1exp4, # ticks - logarithmic.pre1exp], # subticks - None), # labels like ticks - - ([logarithmic.pre1exp5, # ticks - logarithmic.pre1exp], # subticks None)] # labels like ticks - def __init__(self, variants=defaultvariants, extendtick=0, extendlabel=None, epsilon=1e-10): + def __init__(self, variants=defaultvariants, extendtick=0, extendlabel=None, autoexponent=10, epsilon=1e-10): self.variants = variants - if len(variants) > 2: - self.variantsindex = divmod(len(variants), 2)[0] - else: - self.variantsindex = 0 self.extendtick = extendtick self.extendlabel = extendlabel + self.autoexponent = autoexponent self.epsilon = epsilon def partfunctions(self, min, max, extendmin, extendmax): return [lambda d=_partdata(min=min, max=max, extendmin=extendmin, extendmax=extendmax, - sign=1, variantsindex=self.variantsindex-1): - self.partfunction(d), + variantsindex=len(self.variants)): + self.variantspartfunction(d), lambda d=_partdata(min=min, max=max, extendmin=extendmin, extendmax=extendmax, - sign=-1, variantsindex=self.variantsindex): - self.partfunction(d)] + exponent=self.autoexponent): + self.autopartfunction(d)] - def partfunction(self, data): - data.variantsindex += data.sign - if 0 <= data.variantsindex < len(self.variants): + def variantspartfunction(self, data): + data.variantsindex -= 1 + if 0 <= data.variantsindex: logarithmicparter= logarithmic(tickpreexps=self.variants[data.variantsindex][0], labelpreexps=self.variants[data.variantsindex][1], extendtick=self.extendtick, extendlabel=self.extendlabel, epsilon=self.epsilon) return logarithmicparter.partfunctions(min=data.min, max=data.max, extendmin=data.extendmin, extendmax=data.extendmax)[0]() return None + def autopartfunction(self, data): + data.exponent *= self.autoexponent + logarithmicparter= logarithmic(tickpreexps=[preexp([tick.rational((1, 1))], data.exponent), logarithmic.pre1exp], + extendtick=self.extendtick, extendlabel=self.extendlabel, epsilon=self.epsilon) + return logarithmicparter.partfunctions(min=data.min, max=data.max, extendmin=data.extendmin, extendmax=data.extendmax)[0]() + autolog = autologarithmic -- 2.11.4.GIT