[Tex/LaTex] pgfplots custom axis scaling function

pgfplots

If I have a data set in which most of the interesting stuff happens for small values of x then I can use \begin{semilogxaxis} ... \end{semilogxaxis} to create a plot with a logarithmic x axis, which has the effect of compressing the plot for large x values and using more of the plot area for small values of x.

I have a data set where 0 < x < 1 and everything interesting happens for values of x close to 1. I would therefore like to do the opposite of a log plot: use a custom function to specify the progression along the x axis so that large values of x occupy a disproportionately large part of the plot area.

I know I could hack this by transforming the x values in my data and then faking custom tick labels, but is there an easy way to get pgfplots to do this automatically?

Best Answer

In principle pgfplots provides what you need. Especially the x coord trafo section of the manual helps as Qrrbrbirlbel has mentioned.

Here is a very simple example:

\documentclass[tikz,12pt,preview]{standalone}

\usepackage{filecontents}

\begin{filecontents*}{transform.dat}
1   1
2   4
3   9
4   16
\end{filecontents*}

\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.8} 
\usetikzlibrary{plotmarks,calc} 

\begin{document}

\begin{tikzpicture}

\pgfplotsset{
x coord trafo/.code={\pgfmathparse{#1^2}\pgfmathresult},
x coord inv trafo/.code={\pgfmathparse{#1}\pgfmathresult},
}

\begin{axis}[ylabel={$f(x)=x^2$},xlabel=$x^2$]
    \addplot table {transform.dat};
\end{axis}
\end{tikzpicture} 

\end{document}

Here the x-axis is transformed and the final result is a straight line again:

enter image description here