4

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?

1
  • 1
    Easy way? I don’t know. There are certain keys to transform input data (here x filter and x coord trafo). May 17, 2013 at 13:46

1 Answer 1

4

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

3
  • You should use x coord inv trafo/.code={\pgfmathparse{sqrt(#1)}\pgfmathresult}, otherwise the tick values are wrong. Note that automatic "nice" tick selection doesn't work in this case, you'll have to set the tick values manually using something like xtick={0,...,4}.
    – Jake
    May 17, 2013 at 15:24
  • This answer is a little wrong – namely the code only need to set \pgfmathresult, not expands to the result – so the final \pgfmathresult is useless.
    – user202729
    Dec 20, 2021 at 3:19
  • @user202729: Ah thanks, that is indeed superfluous.
    – Alexander
    Dec 20, 2021 at 8:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.