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?

Ubiquitous
  • 2,566

1 Answers1

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

Alexander
  • 9,163
  • 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 '13 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 '21 at 03:19
  • @user202729: Ah thanks, that is indeed superfluous. – Alexander Dec 20 '21 at 08:14