Hi Neal,

The inverse coord transformations accept log values for logarithmic 
axes, that is correct.

In order to convert the number back to the correct number, you should use

       x coord inv trafo/.code={%
           \pgfplotscoordmath{x}{exp}{#1}%
         \show\pgfmathresult
         \expandafter\secondspp\expandafter{\pgfmathresult}}

the "coordmath" stuff ensures a suitable precision and respects the 
correct log basis. It assigns the result to \pgfmathresult.

Your \secondspp seems to overwrite \pgfmathresult, that's why I used the 
two \expandafter constructs to pass by value instead of by reference.


PGFplots assumes that user-provided transformations fit into the axis, 
i.e. that the transformation "knows" that it is to be applied in a log 
context. Consequently, you'd need two transformations, one tailored for 
linear axes and one tailored for log axes. This could be done by means 
of styles.

I hope this helps so far.

Best regards

Christian


Am 16.01.2013 14:10, schrieb Neal H. Walfield:
> Hi,
>
> I'm using x coord inv trafo/.code to transform seconds into more
> (human) meaningful labels.  For instance, my macro turns 7000 seconds
> into '2h'.  This works correctly for normal axes, however, if I use a
> logarithmic axes, my macro is passed the exponent rather than the
> value.  How do I programmatically determine what I am being passed?
>
> A minimal example follows.
>
> Thanks for your help,
>
> Neal
>
>
> \documentclass{article}
>
> \usepackage{tikz}
> \usepackage{pgfplots}
>
> % number
> % threshold
> % divisor
> % suffix
> % else
> \def\secondspphelper#1#2#3#4#5{%
>    \pgfmathfloatparsenumber{#1}%
>    \edef\num{\pgfmathresult}%
>    \pgfmathfloatparsenumber{#2}%
>    \edef\threshold{\pgfmathresult}%
>    \pgfmathfloatparsenumber{#3}%
>    \edef\divisor{\pgfmathresult}%
>    %
>    \pgfmathfloatlessthan{\num}{\threshold}%
>    \ifdim\pgfmathresult pt = 1 pt%
>      \pgfmathfloatdivide{\num}{\divisor}%
>      \pgfmathfloattofixed{\pgfmathresult}%
>      \pgfmathprintnumberto[/pgf/number 
> format/precision=0]{\pgfmathresult}{\pgfmathresult}%
>      \edef\pgfmathresult{\pgfmathresult#4}%
>    \else%
>      #5%
>    \fi%
> }%
>
> % Pretty print a number of seconds.
> % Example:
> %   \secondspp{1000}\pgfmathresult == 17m
> \def\secondspp#1{%
>    % Print as seconds for values up to 90 seconds.
>    \secondspphelper{#1}{90}{1}{s}{%
>      % Print as minutes for values up to 1 hour (= 3600 seconds)
>      \secondspphelper{#1}{3600}{60}{m}{%
>        % Print as hours for values up to 1 day (= 86400 seconds)
>        \secondspphelper{#1}{86400}{3600}{h}{%
>          % Print as days for up to 2 weeks (= 1209600 seconds)
>          \secondspphelper{#1}{1209600}{86400}{d}{%
>            % Print as weeks.
>            \secondspphelper{#1}{Inf}{604800}{w}{}%
>          }%
>        }%
>      }%
>    }%
> }
>
> \begin{document}
>
> \def\xmin{1}
> \def\xmax{10000}
>
> \begin{tikzpicture}
>    \begin{axis}[
>        xticklabel={\tick},
>        scaled x ticks=false,
>        plot coordinates/math parser=false,
>        x coord inv trafo/.code={\def\x{#1}\show\x\secondspp{#1}}
>      ]
>      \addplot[domain=\xmin:\xmax] plot expression {x};
>    \end{axis}
> \end{tikzpicture}
>
> \begin{tikzpicture}
>    \begin{loglogaxis}[
>        xticklabel={\tick},
>        scaled x ticks=false,
>        plot coordinates/math parser=false,
>        x coord inv trafo/.code={\def\x{#1}\show\x\secondspp{#1}}
>      ]
>      \addplot[domain=\xmin:\xmax] plot expression {x};
>    \end{loglogaxis}
> \end{tikzpicture}
>
> \end{document}
>
>
> ------------------------------------------------------------------------------
> Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
> and much more. Keep your Java skills current with LearnJavaNow -
> 200+ hours of step-by-step video tutorials by Java experts.
> SALE $49.99 this month only -- learn more at:
> http://p.sf.net/sfu/learnmore_122612
> _______________________________________________
> Pgfplots-features mailing list
> Pgfplots-features@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/pgfplots-features


------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122912
_______________________________________________
Pgfplots-features mailing list
Pgfplots-features@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pgfplots-features

Reply via email to