Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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}
share|improve this question
    
Maybe you can use Christians answer in the pgfplots features mailing list. –  Martin Heller Apr 7 '13 at 15:59

1 Answer 1

up vote 2 down vote accepted

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%
}
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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