3

I'd like to get the max/min value from a specific column table via function \findmax and \findmin in order to use it in ymin and ymax. I really dont get how \pgfplotstablesort function works. What would be perfect is to call \findmax{YAmax,YA,YAmin} and get back the maximum value of those 3 columns.

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}

\newcommand{\findmax}[1]{
    \pgfplotstablesort[sort key={#1},sort cmp={float >}]{\sorted}{data.dat}%
    \pgfplotstablegetelem{0}{1}\of{\sorted}%
    \let\ymax=\pgfplotsretval%
}

\begin{filecontents}{data.dat}
X   YA  YAmin   YAmax   YB  YBmin   YBmax
1   5   4   6   6   5   7
2   3   2   5   7   5   9
3   6   1   9   9   7   13
4   4   2   6   6   1   11
5   0   -1  3   3   0   5
6   1   -3  6   1   -1  2
\end{filecontents}



\begin{document}


\pgfplotsset{width=3cm,scale only axis}

\begin{tikzpicture}


%\findmax{YAmax,YA,YAmin}
%\findmin{YAmin,YA,YAmin}
\begin{axis}[at={(0,0)},title=YA]%,ymin=\ymin,ymax=\ymax]
\addplot [very thick,smooth,red,solid]  table [x=X, y=YA]   {data.dat}; 
\addplot [very thick,smooth,red,dotted]  table [x=X, y=YAmin]   {data.dat}; 
\addplot [very thick,smooth,red,dotted]  table [x=X, y=YAmax]   {data.dat}; 
\end{axis}

%\findmax{YBmax,YB,YBmin}
%\findmin{YBmax,YB,YBmin}
\begin{axis}[at={(4cm,0)},title=YB]%,ymin=\ymin,ymax=\ymax]
\addplot [very thick,smooth,red,solid]  table [x=X, y=YB]   {data.dat}; 
\addplot [very thick,smooth,red,dotted]  table [x=X, y=YBmin]   {data.dat}; 
\addplot [very thick,smooth,red,dotted]  table [x=X, y=YBmax]   {data.dat}; 
\end{axis}

\end{tikzpicture}
\end{document}
5

Finally done it.

Just created a function that finds the extrema of a chosen column of the external table.

\newcommand{\findmax}[1]{
  % Starting value for max : 0
  \pgfmathtruncatemacro{\mymax}{0}

  % Parsing each element of the first column
  \pgfplotsinvokeforeach {0,...,5}{
    \pgfplotstablegetelem{##1}{#1}\of{\mytable}
    \ifthenelse{ \pgfplotsretval >\mymax  }
    {\pgfmathtruncatemacro{\mymax}{\pgfplotsretval}} % valid
    {}  %invalid
  }
  \let\ymax=\mymax%
}
| improve this answer | |

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.