%--------------------------------------------
%
% Package pgfplots.sty
%
% Provides a user-friendly interface to create function plots (normal
% plots, semi-logplots and double-logplots).
% 
% It is based on Till Tantau's PGF package.
%
% Copyright 2007/2008 by Christian Feuersänger.
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
% 
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
% 
% You should have received a copy of the GNU General Public License
% along with this program.  If not, see <http://www.gnu.org/licenses/>.
%
%--------------------------------------------
\def\pgfplotsversion{0.92.4}
\ProvidesPackage{pgfplots}[2008/02/17 Version \pgfplotsversion]

% ATTENTION:
% you MAY need one of
%   \def\pgfsysdriver{pgfsys-dvipdfm.def}
%   \def\pgfsysdriver{pgfsys-pdftex.def}
%   \def\pgfsysdriver{pgfsys-dvips.def}
%
% BEFORE the first \usepackage{pgf}, \usepackage{tikz} or
% \usepackage{pgfplots}.
% Default is
%   'dvips' for 'latex'
%   'pdftex' for 'pdflatex'
% -> dvipdfm needs special attention.

\RequirePackage{xkeyval}[2006/11/18]
\RequirePackage{ifthen}
\RequirePackage{liststructure}
\RequirePackage{tikz}[2007/06/07]
\RequirePackage{sciformat}
\RequirePackage{pgfmathlog}
\usetikzlibrary{plotmarks}

\def\prefix{pgfplots}

% FIXME: reduce number of variables!
\newcount\axisticknum
\newcount\axis@tickposnum
\newcount\axis@xmode
\newcount\axis@ymode
\newcount\axis@numplots
\newdimen\axis@xcoordminTEX
\newdimen\axis@xcoordmaxTEX
\newdimen\axis@ycoordminTEX
\newdimen\axis@ycoordmaxTEX
\newdimen\axis@tmpa
\newdimen\axis@tmpb
\newif\ifaxis@isuniformtick
\newif\ifaxis@enlargelimits
\newif\ifaxis@enlargelimits@rel@thresh
\newif\ifaxis@enlargelimits@auto
\let\axis@TMP=\empty
\let\axis@TMPB=\empty
\let\axis@TMPC=\empty

\def\axis@leftover{}
\def\axis@rightover{}
\def\axisdefaultwidth{240pt}
\def\axisdefaultheight{207pt}
\def\axisdefaulttickwidth{35}% the maximum space between adjacent ticks (in pt, but don't specify the unit 'pt')
\def\axisdefaulttryminticks{4}

\listnew{\blackwhiteplotspeclist}{%
	mark options={fill=gray},mark=*\\%
	mark options={fill=gray},mark=square*\\%
	mark options={fill=gray},mark=otimes*\\%
	mark=star\\%
	mark options={fill=gray},mark=diamond*\\%
	densely dashed,mark options={solid,fill=gray},mark=*\\%
	densely dashed,mark options={solid,fill=gray},mark=square*\\%
	densely dashed,mark options={solid,fill=gray},mark=otimes*\\%
	densely dashed,mark options={solid},mark=star\\%
	densely dashed,mark options={solid,fill=gray},mark=diamond*\\%
}
\listnew{\coloredplotspeclist}{%
	blue,mark options={fill=blue!80!black},mark=*\\%
	red,mark options={fill=red!80!black},mark=square*\\%
	brown!60!black,mark options={fill=brown!80!black},mark=otimes*\\%
	black,mark=star\\%
	blue,mark options={fill=blue!80!black},mark=diamond*\\%
	red,densely dashed,mark options={solid,fill=red!80!black},mark=*\\%
	brown!60!black,densely dashed,mark options={solid,fill=brown!80!black},mark=square*\\%
	black,densely dashed,mark options={solid,fill=gray},mark=otimes*\\%
	blue,densely dashed,mark=star,mark options=solid\\%
	red,densely dashed,mark options={solid,fill=red!80!black},mark=diamond*\\%
}


\listcopy\coloredplotspeclist\to\autoplotspeclist%
%\listcopy\blackwhiteplotspeclist\to\autoplotspeclist%

\tikzstyle{every axis}=[]
\tikzstyle{every axis plot}=[]
\tikzstyle{every axis label}=[]
\tikzstyle{every axis x label}=[at={(0.5,0)},below,yshift=-15pt]
\tikzstyle{every axis y label}=[at={(0,0.5)},xshift=-35pt,rotate=90]
\tikzstyle{every axis title}=[at={(0.5,1)},above,yshift=6pt]
\tikzstyle{every tick}=[very thin,gray]
\tikzstyle{every minor tick}=[]
\tikzstyle{every major tick}=[]
\tikzstyle{every axis grid}=[style=help lines]
\tikzstyle{every minor grid}=[]
\tikzstyle{every major grid}=[]
\tikzstyle{every tick label}=[]
\tikzstyle{every x tick label}=[]
\tikzstyle{every y tick label}=[]

% specifies how and where to draw the axis.
%   \tikzstyle{every axis legend}+=[at={(0,0)}]
% will draw it at the lower left corner of the axis while
%   \tikzstyle{every axis legend}+=[at={(1,1)}]
% means the upper right corner.
%
% The legend is a 'node' so you can use any tikz option which affects
% nodes. The option 'text width' is set automatically, depending on
% the \legend[textwidth=...] option.
%
% Examples:
% -  \tikzstyle{every axis legend}+=[at={(1.02,1)},anchor=north west]
%   draws the legend OUTSIDE TOP RIGHT.
%
% - \tikzstyle{every axis legend}+=[at={(1,0.5)},anchor=east,outer sep=0.5cm]
%   draws the legend INSIDE MIDDLE RIGHT, separated by 0.5cm from the axis.
\tikzstyle{every axis legend}=[%
		cells={anchor=center},
		inner xsep=3pt,inner ysep=2pt,nodes={inner sep=2pt,text depth=0.15em},
		anchor=north east,%
		shape=rectangle,%
		fill=white,%
		draw=black,
		at={(0.98,0.98)}
		]
%		at={(1,1)},
%		outer sep=0.1cm]


\define@cmdkeys[\prefix]{axis}[axis@]{%
	xmin,xmax,xticklabel,xtick,xtickten,xlabel,%
	ymin,ymax,yticklabel,ytick,ytickten,ylabel,%
	subtickwidth,tickwidth,%
	xfilter,yfilter,%
	width,height,%
	title,%
	execute at begin plot,%
	execute at end plot,%
	enlargelimits,%
	legend columns,%
	x,y}%

\long\def\axis@foreach@to@list#1\to#2{%
	\listnewempty\axis@TMP
	\begingroup
	\foreach \i in {#1} {%
		\globaldefs=1
		\expandafter\listpushback\i\to\axis@TMP
		\globaldefs=0
	}%
	\endgroup
	\listcopy\axis@TMP\to#2\relax
}

\define@cmdkey[\prefix]{axis}[axis@]{xticklabels}{%
	\expandafter\axis@foreach@to@list\axis@xticklabels\to\axis@xticklabels
	%\expandafter\listnew\expandafter\axis@xticklabels\expandafter{\axis@xticklabels}%
	\let\axis@xticklabel=\axis@user@ticklabel@list@x
}
\define@cmdkey[\prefix]{axis}[axis@]{yticklabels}{%
	\expandafter\axis@foreach@to@list\axis@yticklabels\to\axis@yticklabels
	%\expandafter\listnew\expandafter\axis@yticklabels\expandafter{\axis@yticklabels}%
	\let\axis@yticklabel=\axis@user@ticklabel@list@y
}

\define@cmdkey[\prefix]{axis}[axis@]{minor tick length}{%
	\expandafter\let\expandafter\axis@subtickwidth\csname axis@minor tick length\endcsname
}
\define@cmdkey[\prefix]{axis}[axis@]{major tick length}{%
	\expandafter\let\expandafter\axis@tickwidth\csname axis@major tick length\endcsname
}

% sets \axis@tickposnum to
% left=0
% right=1
% both=2
\define@choicekey[\prefix]{axis}{tickpos}[\val\nr]{left,right,both}{%
  \axis@tickposnum=\nr\relax
}
\define@choicekey[\prefix]{axis}{legend plot pos}[\val\nr]{left,right,none}{%
	\edef\axis@legend@plot@pos{\nr}%
}

\define@choicekey[\prefix]{axis}{anchor}[\val\nr]{north,north west,west,south west,south,south east,east,north east,center}{%
  	\edef\axis@anchorchoicenum{\nr}%
}

\define@choicekey[\prefix]{axis}{ticks}[\val\nr]{none,major,minor,both}{%
	\expandafter\ifcase\nr\relax
		\axis@xminorticksfalse
		\axis@yminorticksfalse
		\axis@xmajorticksfalse
		\axis@ymajorticksfalse
	\or
		\axis@xminorticksfalse
		\axis@yminorticksfalse
		\axis@xmajortickstrue
		\axis@ymajortickstrue
	\or
		\axis@xminortickstrue
		\axis@yminortickstrue
		\axis@xmajorticksfalse
		\axis@ymajorticksfalse
	\or
		\axis@xminortickstrue
		\axis@yminortickstrue
		\axis@xmajortickstrue
		\axis@ymajortickstrue
	\fi
}
\define@choicekey[\prefix]{axis}{grid}[\val\nr]{none,major,minor,both}{%
	\expandafter\ifcase\nr\relax
		\axis@xminorgridsfalse
		\axis@yminorgridsfalse
		\axis@xmajorgridsfalse
		\axis@ymajorgridsfalse
	\or
		\axis@xminorgridsfalse
		\axis@yminorgridsfalse
		\axis@xmajorgridstrue
		\axis@ymajorgridstrue
	\or
		\axis@xminorgridstrue
		\axis@yminorgridstrue
		\axis@xmajorgridsfalse
		\axis@ymajorgridsfalse
	\or
		\axis@xminorgridstrue
		\axis@yminorgridstrue
		\axis@xmajorgridstrue
		\axis@ymajorgridstrue
	\fi
}


\define@boolkeys[\prefix]{axis}[axis@]{%
	xminorticks,%
	xmajorticks,%
	yminorticks,%
	ymajorticks,%
	xminorgrids,%
	xmajorgrids,%
	yminorgrids,%
	ymajorgrids,%
	disablelogfilter,%
	disabledatascaling,%
	hide axis,%
	scale only axis}[true]

% sets \axis@xmode to
% normal=0
% log=1
\define@choicekey[\prefix]{axis}{xmode}[\val\nr]{normal,log}{%
  \axis@xmode=\nr\relax
}

% sets \axis@ymode to
% normal=0
% log=1
\define@choicekey[\prefix]{axis}{ymode}[\val\nr]{normal,log}{%
  \axis@ymode=\nr\relax
}

\long\def\axispreset#1{%
	\presetkeys[\prefix]{axis}{#1}{}%
}
\long\def\legendpreset#1{%
	\errmessage{Sorry, legendpreset is now deprecated, along with the legend options text width and font. Legends are now TikZ-matrizes which provide better alignment and can be placed horizontally. See the manual for details.}%
}

\presetkeys[\prefix]{axis}{%
	xmode=normal,
	xmin=,
	xmax=,
	xlabel=,
	xtick=,
	xtickten=,
	xticklabel=,
	xminorticks=true,
	xmajorticks=true,
	xminorgrids=false,
	xmajorgrids=false,
	ymode=normal,
	ymin=,
	ymax=,
	ylabel=,
	ytick=,
	ytickten=,
	yticklabel=,
	yminorticks=true,
	ymajorticks=true,
	yminorgrids=false,
	ymajorgrids=false,
	grid=none,%
	tickpos=both,
	xfilter=,
	yfilter=,
	title=,
	width=,
	height=,
	anchor=south west,
	subtickwidth=0.1cm,
	tickwidth=0.15cm,
	scale only axis=false,
	hide axis=false,
	legend columns=1,
	legend plot pos=left,
	x=,% is implicitly set by 'width' and/or '\axisdefaultwidth'
	y=,% is implicitly set by 'height' and/or '\axisdefaultheight'
	execute at begin plot=,%
	execute at end plot=,%
	enlargelimits=auto,
	disablelogfilter=false}{}

\def\logten{2.3025851}
\def\reciproc@logten{0.434294481903252}

\newcommand{\logi}[1]{%
	\ifcase#1
	\or0
	\or0.693147
	\or1.098612
	\or1.386294
	\or1.60943791
	\or1.7917594
	\or1.94591014
	\or2.07944154
	\or2.197224
	\fi
}

\newcommand{\show@yticklabel}[2]{{%
	\let\ticknum=#1%
	\ifaxis@float@numerics@mode@y
		% this here stores \\tick@S, \\tick@M, \\tick@E
		\axis@inverse@datascaletrafo@y{#2}\to\tick
		% .. and this here provides \tick as fixed point repr:
		\scitofixedsingle\tick\tick
	\else
		\def\tick{#2}%
	\fi
	\axis@yticklabel
}}

% x-Achsenbeschriftung zum #1.ten Tick:
% #1: die ticknum
% #2: der x wert dafuer
\newcommand{\show@xticklabel}[2]{{%
	\let\ticknum=#1%
	\ifaxis@float@numerics@mode@x
		% this here stores \\tick@S, \\tick@M, \\tick@E
		\axis@inverse@datascaletrafo@x{#2}\to\tick
		% .. and this here provides \tick as fixed point repr:
		\scitofixedsingle\tick\tick
	\else
		\def\tick{#2}%
	\fi
	\axis@xticklabel
}}

\def\axis@user@ticklabel@list@x{%
	\listselect\ticknum\of\axis@xticklabels\to\tick
	\tick
}
\def\axis@user@ticklabel@list@y{%
	\listselect\ticknum\of\axis@yticklabels\to\tick
	\tick
}

\newcommand{\axisdefaultticklabel}[0]{%
	$\prettyprintnumber{\tick}$%
}

\newcommand{\axisdefaultticklabellog}[0]{%
	\logtologtentomacro{\tick}{\roundedtick}%
	$10^{\prettyprintnumber{\roundedtick}}$%
}
	

\newcommand{\axisshowxlabel}{%
	\node 
		[style=every axis label,%
		style=every axis x label]
	{\axis@xlabel};

}
\newcommand{\axisshowylabel}{%
	\node 
		[style=every axis label,
		style=every axis y label] 
	{\axis@ylabel};
}
\newcommand{\axisshowtitle}{%
	\node%
		[style=every axis title]
		{\axis@title};
}

% Y-Achsen und Achsenbeschriftung LOG:
% 1: Ticks
\newcommand{\axis@drawyaxis}[1]{%
	\begingroup
	\newif\ifneedsminorloop
	\axisticknum=0
	\edef\axis@TMP{#1}%
	\ifx\axis@TMP\empty
	\else
		\ifaxis@yminorticks
			\needsminorlooptrue
		\fi
		\ifaxis@yminorgrids
			\needsminorlooptrue
		\fi
		\def\axis@placecomputedtick##1[##2]{%
			\draw[##2]
			\ifcase\axis@tickposnum
				(\axis@xcoordminTEX\axis@leftover,		\axis@tmpa)
			--	(\axis@xcoordminTEX+##1,	\axis@tmpa)
			\or
				(\axis@xcoordmaxTEX\axis@rightover,		\axis@tmpa)
			--	(\axis@xcoordmaxTEX-##1,	\axis@tmpa)
			\or
				(\axis@xcoordminTEX\axis@leftover,		\axis@tmpa)
			--	(\axis@xcoordminTEX+##1,	\axis@tmpa)

				(\axis@xcoordmaxTEX\axis@rightover,		\axis@tmpa)
			--	(\axis@xcoordmaxTEX-##1,	\axis@tmpa)
			\fi
			;
		}%
		\def\placecomputedgridline[##1]{%
			\draw[##1]
				(\axis@xcoordminTEX\axis@leftover,	\axis@tmpa)
			--	(\axis@xcoordmaxTEX\axis@rightover,	\axis@tmpa)
			;
		}%
		\foreach \y in {#1} {	
			\pgfextracty{\axis@tmpa}{\pgfpointxy{0}{\y}}%
			%
			\ifdim\axis@tmpa<\axis@ycoordminTEX
			\else
				\ifdim\axis@tmpa>\axis@ycoordmaxTEX
				\else
					% Achsenbeschriftung:
					\ifnum\axis@tickposnum=1
						\node at 
							(\axis@xcoordmaxTEX\axis@leftover,\axis@tmpa)
							[right,style=every tick label,style=every y tick label]
							{\show@yticklabel\axisticknum\y};
					\else
						\node at 
							(\axis@xcoordminTEX\axis@leftover,\axis@tmpa)
							[left,style=every tick label,style=every y tick label]
							{\show@yticklabel\axisticknum\y};
					\fi
				\fi
			\fi
			\global\advance\axisticknum by1
			\begin{scope}
			\clip 			(\axis@xcoordminTEX\axis@leftover,	\axis@ycoordminTEX\axis@leftover) 
				rectangle	(\axis@xcoordmaxTEX\axis@rightover,	\axis@ycoordmaxTEX\axis@rightover);
			% Y-ticks left and/or right
			% in log:
			%  log( i*10^k ) = log\i + k\log10 -> draw ticks for i=1..9
			\ifneedsminorloop
				\foreach \i in {1,...,9} {
					% this code here is scoped inside of \foreach.
					\pgfextracty{\axis@tmpb}{\pgfpointxy{0}{\logi\i}}%
					\advance\axis@tmpa by\axis@tmpb
					\ifaxis@yminorgrids
						\placecomputedgridline[style=every axis grid,style=every minor grid]%
					\fi
					\ifaxis@yminorticks
						\axis@placecomputedtick\axis@subtickwidth[style=every tick,style=every minor tick]%
					\fi
				}%
			\fi
			\ifaxis@ymajorgrids
				\placecomputedgridline[style=every axis grid,style=every major grid]%
			\fi
			\ifaxis@ymajorticks
				\axis@placecomputedtick\axis@tickwidth[style=every tick,style=every major tick]%
			\fi
			\end{scope}
		}%
	\fi
	\endgroup
}

% X-Achsen und Achsenbeschriftung 
% 1: Ticks
\newcommand{\axis@drawxaxis}[1]{%
	\begingroup
	\axisticknum=0
	\newif\ifneedsminorloop
	\edef\axis@TMP{#1}%
	\ifx\axis@TMP\empty
	\else
		\ifaxis@xminorticks
			\needsminorlooptrue
		\fi
		\ifaxis@xminorgrids
			\needsminorlooptrue
		\fi
		\def\axis@placecomputedtick##1[##2]{%
			\draw[##2]
			\ifcase\axis@tickposnum
				(\axis@tmpa,	\axis@ycoordminTEX\axis@leftover)
			--	(\axis@tmpa,	\axis@ycoordminTEX+##1)
			\or
				(\axis@tmpa,	\axis@ycoordmaxTEX\axis@rightover)
			--	(\axis@tmpa,	\axis@ycoordmaxTEX-##1)
			\or
				(\axis@tmpa,	\axis@ycoordminTEX\axis@leftover)
			--	(\axis@tmpa,	\axis@ycoordminTEX+##1)

				(\axis@tmpa,	\axis@ycoordmaxTEX\axis@rightover)
			--	(\axis@tmpa,	\axis@ycoordmaxTEX-##1)
			\fi
			;
		}%
		\def\placecomputedgridline[##1]{%
			\draw[##1]
				(\axis@tmpa,	\axis@ycoordminTEX\axis@leftover)
			--	(\axis@tmpa,	\axis@ycoordmaxTEX\axis@rightover)
			;
		}%
		\foreach \x in {#1} {	
			\pgfextractx{\axis@tmpa}{\pgfpointxy{\x}{0}}%
			%
			\ifdim\axis@tmpa<\axis@xcoordminTEX
			\else
				\ifdim\axis@tmpa>\axis@xcoordmaxTEX
				\else
					% Achsenbeschriftung:
					\ifnum\axis@tickposnum=1
						\node at 
							(\axis@tmpa,\axis@ycoordmaxTEX\axis@leftover)
							[above,style=every tick label,style=every x tick label]
							{\show@xticklabel\axisticknum\x};
					\else
						\node at 
							(\axis@tmpa,\axis@ycoordminTEX\axis@leftover)
							[below,style=every tick label,style=every x tick label]
							{\show@xticklabel\axisticknum\x};
					\fi
				\fi
			\fi
			\global\advance\axisticknum by1
			%
			\begin{scope}
			\clip 			(\axis@xcoordminTEX\axis@leftover,	\axis@ycoordminTEX\axis@leftover) 
				rectangle	(\axis@xcoordmaxTEX\axis@rightover,	\axis@ycoordmaxTEX\axis@rightover);
			% X-Axis ticks bottom and top
			% in log:
			%  log( i*10^k ) = log\i + k\log10 -> draw ticks for i=1..9
			\ifneedsminorloop
				\foreach \i in {1,...,9} {
					\pgfextractx{\axis@tmpb}{\pgfpointxy{\logi\i}{0}}%
					\advance\axis@tmpa by\axis@tmpb
					\ifaxis@xminorgrids
						\placecomputedgridline[style=every axis grid,style=every minor grid]%
					\fi
					\ifaxis@xminorticks
						\axis@placecomputedtick\axis@subtickwidth[style=every tick,style=every minor tick]%
					\fi
				}%
			\fi
			\ifaxis@xmajorgrids
				\placecomputedgridline[style=every axis grid,style=every major grid]%
			\fi
			\ifaxis@xmajorticks
				\axis@placecomputedtick\axis@tickwidth[style=every tick,style=every major tick]%
			\fi
			\end{scope}
		}%
	\fi
	\endgroup
}

\def\axis@rememberplotspec#1{{%
	\globaldefs=1
	\listpushback#1\to\axis@plotspeclist
	\advance\axis@numplots by1%
}}

\def\axis@getautoplotspec into#1{%
	\listsize\autoplotspeclist\to\c@pgf@counta
	\ifnum\c@pgf@counta=0
		\let#1=\empty
	\else
		\c@pgf@countb=\axis@numplots
		\loop
		\ifnum\c@pgf@countb<\c@pgf@counta
		\else
			\advance\c@pgf@countb by-\c@pgf@counta
		\repeat
		\listselect\c@pgf@countb\of\autoplotspeclist\to#1
%\message{pgfplots.sty: using \string\autoplotspeclist\ specification no\#\the\c@pgf@countb (of \the\c@pgf@counta): #1}%
	\fi
}

% The main interface to draw a plot into an axis.
%
% Usage:
% \addplot 
% 	plot coordinates {
% 		(0,0)
% 		(1,1)
% 	};
% 
% or
%
% \addplot[color=blue,mark=*]
% 	plot coordinates {
% 		(0,0)
% 		(1,1)
% 	};
% 
% The first syntax will use the next plot specification in the list
% \autoplotspeclist
% and the first will use blue color and * markers. 
%
% The linespec. will be used in the legend.
\long\def\addplot{%
	\@ifnextchar+{%
		\axis@getautoplotspec into\nextplotspec
		\axis@addplotimplAPPEND
	}{%
		\@ifnextchar[{%
			\axis@addplotimpl%
		}{%
			\axis@getautoplotspec into\nextplotspec
			% the space after ']' is required here:
			% FIXME: 
			% - \addplot[]plot coordinates is NOT allowed!?
			\expandafter\axis@addplotimpl\expandafter[\nextplotspec]
		}%
	}%
}

\long\def\axis@addplotimplAPPEND+[{%
	\expandafter\axis@addplotimpl\expandafter[\nextplotspec,
}

\long\def\axis@addplotimpl[#1] #2;{%
%\tracingmacros=2\tracingcommands=2
	% #2 = plot coordinates {...}
	\ifx\csname axis@execute at begin plot\endcsname\empty
	\else
		\csname axis@execute at begin plot\endcsname
	\fi
	\axis@rememberplotspec{[#1]}%
	\ifaxis@filtercoords
		% FIXME : FREE THIS VARIABLE:
		\axis@filtercoords@and@up@limits#2;\newplotcmdto\axis@filteredcoordinateplotcmd
		\def\axis@TMP{\axispath@impl{\draw[style=every axis plot,#1]}}%
		\expandafter\axis@TMP\axis@filteredcoordinateplotcmd%
	\else
		\ifaxis@draw@at@end
			\axis@update@limits{#2;}%
		\fi
		\axispath@impl{\draw[style=every axis plot,#1]}#2;%
	\fi
	\ifx\csname axis@execute at end plot\endcsname\empty
	\else
		\csname axis@execute at end plot\endcsname
	\fi
%\tracingmacros=0\tracingcommands=0
}%

\long\def\axis@update@limits#1{%
	\axis@foreach@plot@coord@do%
		\axis@update@limits@for@one@point
	\for
	#1%
	\EOI
}

% PRECONDITIONS:
%   - 'floating point numerics active' 
%   		=> coordinate filtering is active
%   		=> #1 and #2 are MACRO names
%   		=> these macros are encoded with \scisetcomponents
%   - no coordinate filters active 
%   		=> #1 and #2 MAY be macros, but they must be valid TeX
%   		length (without unit).
\long\def\axis@update@limits@for@one@point#1#2{%
%\tracingmacros=2\tracingcommands=2
%\message{Updating limits for (#1,#2) ...}%
	\ifaxis@autocompute@xlim
		\ifaxis@float@numerics@mode@x
%\scitofixedsingle\axis@xmin\axis@TMP
%\scitofixedsingle\axis@xmax\axis@TMPB
%\message{current limits: xmin=\axis@TMP, xmax=\axis@TMPB}%
			\scigetcomponents#1\axis@tmp@S\axis@tmp@M\axis@tmp@E
			\scigetcomponents\axis@xmin\axis@lim@S\axis@lim@M\axis@lim@E
			\scimathmin%
				\axis@lim@S\axis@lim@M\axis@lim@E
			\and%
				\axis@tmp@S\axis@tmp@M\axis@tmp@E
			\to%
				\axis@lim@S\axis@lim@M\axis@lim@E
			\scisetcomponents\axis@xmin\axis@lim@S\axis@lim@M\axis@lim@E
			%
			\scigetcomponents\axis@xmax\axis@lim@S\axis@lim@M\axis@lim@E
			\scimathmax%
				\axis@lim@S\axis@lim@M\axis@lim@E
			\and%
				\axis@tmp@S\axis@tmp@M\axis@tmp@E
			\to%
				\axis@lim@S\axis@lim@M\axis@lim@E
			\scisetcomponents\axis@xmax\axis@lim@S\axis@lim@M\axis@lim@E
%\scitofixedsingle\axis@xmin\axis@TMP
%\scitofixedsingle\axis@xmax\axis@TMPB
%\message{updated limits: xmin=\axis@TMP, xmax=\axis@TMPB}%
		\else
			\pgfmathmin{\axis@xmin}{#1}%
			\let\axis@xmin=\pgfmathresult
			\pgfmathmax{\axis@xmax}{#1}%
			\let\axis@xmax=\pgfmathresult
		\fi
	\fi
	\ifaxis@autocompute@ylim
		\ifaxis@float@numerics@mode@y
%\scitofixedsingle\axis@ymin\axis@TMP
%\scitofixedsingle\axis@ymax\axis@TMPB
%\message{current limits: ymin=\axis@TMP, ymax=\axis@TMPB}%
			\scigetcomponents#2\axis@tmp@S\axis@tmp@M\axis@tmp@E
			\scigetcomponents\axis@ymin\axis@lim@S\axis@lim@M\axis@lim@E
			\scimathmin%
				\axis@lim@S\axis@lim@M\axis@lim@E
			\and%
				\axis@tmp@S\axis@tmp@M\axis@tmp@E
			\to%
				\axis@lim@S\axis@lim@M\axis@lim@E
			\scisetcomponents\axis@ymin\axis@lim@S\axis@lim@M\axis@lim@E
			%
			\scigetcomponents\axis@ymax\axis@lim@S\axis@lim@M\axis@lim@E
			\scimathmax%
				\axis@lim@S\axis@lim@M\axis@lim@E
			\and%
				\axis@tmp@S\axis@tmp@M\axis@tmp@E
			\to%
				\axis@lim@S\axis@lim@M\axis@lim@E
			\scisetcomponents\axis@ymax\axis@lim@S\axis@lim@M\axis@lim@E
%\scitofixedsingle\axis@ymin\axis@TMP
%\scitofixedsingle\axis@ymax\axis@TMPB
%\message{updated limits: ymin=\axis@TMP, ymax=\axis@TMPB}%
		\else
			\pgfmathmin{\axis@ymin}{#2}%
			\let\axis@ymin=\pgfmathresult
			\pgfmathmax{\axis@ymax}{#2}%
			\let\axis@ymax=\pgfmathresult
		\fi
	\fi
	\axis@limits@are@computedtrue
%\tracingmacros=0\tracingcommands=0
}

% Filters coordinates and writes a new, modified 'plot coordinates'
% command to macro #2.
\long\def\axis@filtercoords@and@up@limits#1\newplotcmdto#2{%
	\let#2=\empty
	\let\axis@filter@output=#2
	\axis@foreach@plot@coord@do%
		\axis@filter@one@coord@pair
	\for
	#1%
	\EOI
	\edef#2{plot coordinates {\axis@filter@output};}%
}%

\def\axis@filter@one@coord@pair#1#2{%
	\ifx\axis@xfilter\empty
		\def\axis@filter@tmp@x{#1}%
	\else
		\let\axis@filter@tmp@x=\empty
		\axis@xfilter#1\to\axis@filter@tmp@x
	\fi
	\ifx\axis@yfilter\empty
		\def\axis@filter@tmp@y{#2}%
	\else
		\let\axis@filter@tmp@y=\empty
		\axis@yfilter#2\to\axis@filter@tmp@y
	\fi
	\ifx\axis@filter@tmp@x\empty
		\message{NOTE: coordinate (#1,#2) has been dropped because of the x-coordinate filter.}%
	\else
		\ifx\axis@filter@tmp@y\empty
			\message{NOTE: coordinate (#1,#2) has been dropped because of the y-coordinate filter.}%
		\else
			\ifaxis@draw@at@end
				% update also axis limits:
				\axis@update@limits@for@one@point{\axis@filter@tmp@x}{\axis@filter@tmp@y}%
			\else
				% apply data transformation directly.
				\ifaxis@float@numerics@mode@x
					\axis@datascaletrafo@x\axis@filter@tmp@x\to\axis@filter@tmp@x
				\fi
				\ifaxis@float@numerics@mode@y
					\axis@datascaletrafo@y\axis@filter@tmp@y\to\axis@filter@tmp@y
				\fi
			\fi
			% remind:
			%  \the\tokenregister
			% will yield the contents of the token register, it will
			% NOT expand recursively (like \expandafter)!
			%
			% Employ that here to maintain macros inside of
			%   \axis@filter@tmp[xy]
			% (macros inside of those things are used by the floating
			% point numerics to scale input data to TeX-lengths)
			\pgfplots@toka=\expandafter{\axis@filter@output}%
			\TOKL@ta=\expandafter{\axis@filter@tmp@x}%
			\TOKL@tb=\expandafter{\axis@filter@tmp@y}%
			\edef\axis@filter@output{\the\pgfplots@toka (\the\TOKL@ta,\the\TOKL@tb)}%
%\message{FILTERING: appended \axis@filter@tmp@x,\axis@filter@tmp@y}%  -> results in \axis@filter@output}%
		\fi
	\fi
}


% A looping command to loop through plot coordinates.
% For every point, #3{X}{Y} will be invoked.
%
% No scoping is used during this operation, so you can access outer
% variables.
\long\def\axis@foreach@plot@coord@do#1\for plot coordinates #2;\EOI{%
	\axis@foreach@plot@coord@ITERATE#1\n#2\EOI%
}

\def\axis@foreach@plot@coord@ITERATE#1\n{%
	\@ifnextchar;{%
		\axis@foreach@plot@coord@FINISH@SEMICOLON%
	}{%
		\@ifnextchar\EOI{%
			\axis@foreach@plot@coord@FINISH%
		}{%
			\axis@foreach@plot@coord@NEXT#1\n%
		}%
	}%
}

\def\axis@foreach@plot@coord@NEXT#1\n(#2,#3){%
	#1{#2}{#3}%
	\axis@foreach@plot@coord@ITERATE#1\n
}

\def\axis@foreach@plot@coord@FINISH\EOI{}
\def\axis@foreach@plot@coord@FINISH@SEMICOLON;\EOI{}

% INPUT: 
%   a sequence of points (SMeE,SMeE) (terminated with ';') 
%   where S=sign, M=mantisse, E = exponent.
%   Such input is generated in the case axis@float@numerics@modetrue
%   by the coordinate filters.
% OUTPUT: 
%   proper sequence of fixed point coordinates which are the result of the
%   data scaling transformation (\axis@datascaletrafo@x).
%
% The output will be written into the macro #1.
\long\def\axis@apply@data@scaletrafo@to@plot@data#1\to#2{%
	\let#2=\empty
	\let\axis@data@scaletrafo@result=\empty
	\axis@foreach@plot@coord@do
		\axis@apply@data@scaletrafo@to@one@point
	\for
	#1%
	\EOI
	\edef#2{plot coordinates {\axis@data@scaletrafo@result};}%
	%\axis@apply@data@scaletrafo@to@plot@data@ITERATE\to#2 #1;%
}
	
\def\axis@apply@data@scaletrafo@to@one@point#1#2{%
	\ifaxis@float@numerics@mode@x
		\axis@decode@filtered@float@numerics#1\to\axis@filter@tmp@x
		\axis@datascaletrafo@x\axis@filter@tmp@x\to\axis@filter@tmp@x
	\else
		\def\axis@filter@tmp@x{#1}%
	\fi
	\ifaxis@float@numerics@mode@y
		\axis@decode@filtered@float@numerics#2\to\axis@filter@tmp@y
		\axis@datascaletrafo@y\axis@filter@tmp@y\to\axis@filter@tmp@y
	\else
		\def\axis@filter@tmp@y{#2}%
	\fi
	\edef\axis@data@scaletrafo@result{\axis@data@scaletrafo@result (\axis@filter@tmp@x,\axis@filter@tmp@y)}%
}


\def\axis@decode@filtered@float@numerics#1#2e#3\to#4{%
	\scisetcomponents#4{#1}{#2}{#3}%
}


\long\def\axispath#1;{%
	\axispath@impl{}#1;
}

% low-level \axispath implementation.
% #1:
%    the command which is responsable for drawing.
%    - If #1 is NOT '\empty', we expect #2 to contain only
%      EXPANDABLE DATA.
%      That's important for postponed floating point arithmetics in #2.
%    - If #1='\empty', we don't make any assumption about #2
%      and process it as-is.
%
% #2: see above.
\long\def\axispath@impl#1#2;{%
	\ifaxis@draw@at@end
		\listpushback{#1}\to\axis@stored@plot@cmds
		\listpushback{#2;}\to\axis@stored@plot@data
	\else
		#1#2;%
	\fi
}


% Assigns a legend.
% Syntax:
% \legend{entry 1\\entry2\\entry3}
\newcommand{\legend}[2][]{
	{%
		\globaldefs=1% this will ONLY store the options and the legend into global variables
		\def\axis@TMP{#1}%
		\ifx\axis@TMP\empty
		\else
			\errmessage{Sorry, legend are now deprecated. Legends are now TikZ-matrizes which provide better alignment and can be placed horizontally. See the manual for details.}%
		\fi
		\def\axis@TMP{#2}%
		\ifx\axis@TMP\empty
		\else
			\listnew\axis@legend{#2}%
		\fi
	}
}

\newcommand{\addlegendentry}[1]{%
	{%
	\globaldefs=1% this will ONLY store the options and the legend into global variables
	\listpushback#1\to\axis@legend
	}%
}

\def\axis@pop@next@legend{{%
	\globaldefs=1
	\listcheckempty\axis@plotspeclist
	\iflistempty
		\let\axis@curplotlist=\empty
	\else
		\listpopfront\axis@plotspeclist\to\axis@curplotlist
	\fi
	%
	\listcheckempty\axis@legend
	\iflistempty
		\let\axis@curlegend=\empty
	\else
		\listpopfront\axis@legend\to\axis@curlegend
	\fi
	\advance\axis@numplots by-1
}}

\long\def\axis@show@small@legendplots#1{
	\draw#1
			[mark repeat=2,mark phase=2] 
			plot coordinates {
				(0cm,0cm) 
				(0.3cm,0cm)
				(0.6cm,0cm)%
			};%
}

% Typesets a legend node.
%
% It will either typeset a previously computed legend (which needs to be
% stored in the macro \axis@already@computed@legend@node)
%
% or it creates a legend, stores the commands into the macro named
% above and typesets it.
\newcommand\axis@createlegend{%
	\ifx\axis@already@computed@legend@node\empty
		\listcheckempty\axis@legend
		\iflistempty
		\else
		%
		% 
		\begingroup
			% assemble a 
			% \matrix {
			% 	small plot  & legend1\\
			% 	small plot  & legend2\\
			% 	...
			% };
			% command [and using the 'legend columns' option]
			%
			% \TOKL@ta={
			% 	small plot  & legend1\\
			% 	small plot  & legend2\\
			% 	...
			% }
			% ( I have allocated the token register in my simplelist.sty)
			% 
			% \global\def\axis@TMP{
			% 	\matrix {
			% 		\TOKL@TA
			% 	};
			% }
			% -> finally, \axis@TMP will contain the complete command.
			\TOKL@ta={}%
			\let\curcolumnNum=\c@pgf@counta
			\let\maxcolumnCount=\c@pgf@countb
			\let\legendplotpos=\c@pgf@countc
			\legendplotpos\expandafter=\axis@legend@plot@pos
			\curcolumnNum=0
			\maxcolumnCount\expandafter=\csname axis@legend columns\endcsname\relax
			%
			\loop
			\ifnum0<\axis@numplots\relax
				\axis@pop@next@legend
				\ifx\axis@curlegend\empty
				\else
					\advance\curcolumnNum by1
					\edef\axis@TMP{%
						\the\TOKL@ta
						\ifcase\legendplotpos
							% legend plot pos=left 
							\noexpand\axis@show@small@legendplots{\axis@curplotlist}%
							\noexpand\pgfmatrixnextcell
							\noexpand\node {\axis@curlegend};
						\or
							% legend plot pos=right
							\noexpand\node {\axis@curlegend};
							\noexpand\pgfmatrixnextcell
							\noexpand\axis@show@small@legendplots{\axis@curplotlist}%
						\or
							% legend plot pos=none
							\noexpand\node {\axis@curlegend};
						\fi
						\ifnum\curcolumnNum=\maxcolumnCount
							\noexpand\\
						\else
							\ifnum\axis@numplots=0
								\noexpand\\
							\else
								\noexpand\pgfmatrixnextcell
							\fi
						\fi
					}%
					\ifnum\curcolumnNum=\maxcolumnCount
						\curcolumnNum=0
					\fi
					\expandafter\TOKL@ta\expandafter{\axis@TMP}%
				\fi
			\repeat
			\TOKL@tb={\matrix[style=every axis legend]}%
			\xdef\axis@TMP{%
				\the\TOKL@tb {%
					\the\TOKL@ta
				};%
			}%
		\endgroup
		\let\axis@already@computed@legend@node=\axis@TMP
		\fi
	\fi
	\axis@already@computed@legend@node
}

% Checks whether the argument to xtick or ytick is a UNIFORM tick
% sequence.
%
% A uniform tick sequence is 0,...,10 and 3,4,5 and -5,-4,-2 but 
% NOT 0,2,4 or 4,10.
%
% Furthermore, any NON-integer tick arguments are also assumed to be
% NOT uniform.
%
% INPUT:
% #1: a tick argument (i.e. something which can be put to 
%     \foreach \x in {#1})
%
% OUTPUT:
%    \axis@isuniformticktrue
%    or
%    \axis@isuniformtickfalse
% depending on the check.
% This variable will be set globally.
\def\axis@checkisuniformLOGtick#1{%
	\begingroup
	\global\axis@isuniformticktrue
	\newif\ifisfirst
	\newif\iftwo@are@equal
	\isfirsttrue
	\foreach \x in {#1}{%
		\pgfmathmultiply@\x\reciproc@logten
		\let\cur=\pgfmathresult
		% check whether
		%  \cur - last == 1 (last = \axis@TMPB)
		\ifisfirst
			\global\isfirstfalse
		\else
			\pgfmathsubtract@\cur\axis@TMPB%
			\pgfmathlog@approxequalto@macro\pgfmathresult{1.0}{two@are@equal}%
			\iftwo@are@equal
			\else
				\global\axis@isuniformtickfalse
				\breakforeach
			\fi
		\fi
		\global\let\axis@TMPB=\cur
	}%
	\endgroup
}

\def\skipsuffixzero#1.#2|{
	{%
	\def\axis@TMP{#2}%
	\def\axis@TMPB{0}%
	\ifx\axis@TMP\axis@TMPB
		\global\def\pgfmathresult{#1}%
	\else
		\global\def\pgfmathresult{#1.#2}%
	\fi
	}%
}

\def\logtologtentomacro#1#2{%
	\pgfmathmultiply@{#1}\reciproc@logten%
	\expandafter\skipsuffixzero\pgfmathresult|%
	\let#2=\pgfmathresult
}

% Expands to #1/log(10). It will also skip a suffix '.0'
\def\logtologten#1{%
	\pgfmathmultiply@{#1}\reciproc@logten%
	\expandafter\skipsuffixzero\pgfmathresult|%
	\pgfmathresult
}

% helper method which computes log10*\x foreach \x in {#1}.
% The result will be \xdef'ed into #2.
\def\axis@compute@tick@times@logten#1\to#2{%
	\global\let#2=\empty
	\foreach \axis@TMPB in {#1} {%
		\pgfmathmultiply@\axis@TMPB\logten%
		\ifx#2\empty
			\xdef#2{\pgfmathresult}%
		\else
			\xdef#2{#2,\pgfmathresult}%
		\fi
	}%
}

\def\axis@init@enlarge@limit@booleans{%
	\axis@enlargelimits@autofalse
	\axis@enlargelimitsfalse
	\axis@enlargelimits@rel@threshfalse
	\edef\axis@TMP{\axis@enlargelimits}%
	%
	\def\axis@TMPB{true}%
	\ifx\axis@TMP\axis@TMPB
		\axis@enlargelimitstrue
	\else
		\def\axis@TMPB{false}%
		\ifx\axis@TMP\axis@TMPB
		\else
			\def\axis@TMPB{auto}%
			\ifx\axis@TMP\axis@TMPB
				\axis@enlargelimits@autotrue
			\else
				\begingroup
				% try to read it as number:
				\expandafter\pgf@xa\axis@enlargelimits pt\relax
				\endgroup
				\axis@enlargelimitstrue
				\axis@enlargelimits@rel@threshtrue
			\fi
		\fi
	\fi
}

\def\axis@enlarge@limit@for#1{%
	\begingroup
	\expandafter\let\expandafter\min\expandafter=\csname axis@#1min\endcsname
	\expandafter\let\expandafter\max\expandafter=\csname axis@#1max\endcsname
	\ifcase\csname axis@#1mode\endcsname
		\ifaxis@enlargelimits@rel@thresh
			\edef\enlargepercent{\axis@enlargelimits}%
		\else
			\def\enlargepercent{0.1}% FIXME : pack 10% as default into option 'enlargelimits' or so
		\fi
		\pgfmathsubtract@\max\min%
		\expandafter\pgf@xa\pgfmathresult pt
		\expandafter\pgf@xb\enlargepercent\pgf@xa
		\ifdim\pgf@xb>0.001pt
			% the case with 
			%   enlargeabsolute ~= 0
			% means that \min ~= \max.
			% It is handled in another method.
			\edef\enlargeabsolute{\pgf@sys@tonumber{\pgf@xb}}%
			%
			% compute xmin := xmin - enlargeabsolute
			\pgfmathsubtract@\min\enlargeabsolute%
			\let\min=\pgfmathresult
			\pgfmathadd@\max\enlargeabsolute%
			\let\max=\pgfmathresult
		\fi
	\or
		% compute
		%   \pgfmathsetmacro{\min}{\min - 0.5*\logten}%
		%   \pgfmathsetmacro{\max}{\max + 0.5*\logten}%
		% just a more efficiently (I hope so):
		\expandafter\pgfmath@x\logten pt
		\divide\pgfmath@x by2
		\pgfmathlog@invoke@expanded\pgfmathsubtract@{{\min}{\pgf@sys@tonumber{\pgfmath@x}}}%
		\let\min=\pgfmathresult
		\pgfmathlog@invoke@expanded\pgfmathadd@{{\max}{\pgf@sys@tonumber{\pgfmath@x}}}%
		\let\max=\pgfmathresult
	\fi
	\xdef\axis@TMP{\min}%
	\xdef\axis@TMPB{\max}%
	\endgroup
	\expandafter\let\csname axis@#1min\endcsname=\axis@TMP
	\expandafter\let\csname axis@#1max\endcsname=\axis@TMPB
}

% Computes tick positions using the current axis limits.
%
% Parameters:
% \axisdefaulttickwidth
%    Determines the maximum space which is not filled by at least one
%    tick label (approximate, there is some rounding internally)
% \axisdefaulttryminticks
%    see manual
%
% Idea:
% We want ticks at each 
%    { i*H, i in \Z }.
% Of course, there shouldn't be TOO MUCH ticks. 
%
% Our heuristics is to set
%    desirednumticks = round(ACTUAL WIDTH / axisdefaulttickwidth)
% and generate H = (axis range) / desirednumticks.
%
% Since not all step sizes H look well, restrict H to a set of allowed 
% step sizes such as 
%   { 1, 1/2, 1/5, 1/10 },
% or, to be more precise:
%   { 1*10^e, 2*10^e, 5*10^e }
% -> round to the nearest matching number!
%
% Then, the resulting tick is
% TICK={MIN,MIN+H,...,MAX}
% where
%    MIN = I*H
% is chosen such that 
%    axis minimum limit = I*H + rest; |rest| < H.
%
%
% PRECONDITION:
% - limits are correct
% - axis width/height is set correctly
%
% POSTCONDITION:
% - Tick for axis #1 is assigned
% - \ifaxis@needs@check@uniformtick is set
\def\axis@assign@default@tick@foraxis#1{%
	\begingroup
	% Shortcut-names:
	\expandafter\let\expandafter\ifaxis@is@datascaled\csname ifaxis@float@numerics@mode@#1\endcsname
	\expandafter\let\expandafter\axis@data@scale@trafo\csname axis@datascaletrafo@#1\endcsname
	\expandafter\let\expandafter\axis@data@scale@inverse@trafo\csname axis@inverse@datascaletrafo@#1\endcsname
	%
	\let\desirednumticks=\c@pgf@countd
	\let\Wr=\pgf@xc
	\Wr=\csname axis@#1coordmaxTEX\endcsname
	\advance\Wr by-\csname axis@#1coordminTEX\endcsname
	% r = max place without ticks in pt -> choose desirednumticks >= W/r
	\expandafter\expandafter\divide\Wr\axisdefaulttickwidth
	\pgfmathsetcount{\desirednumticks}{\Wr}%
	\advance\desirednumticks by1
	\expandafter\ifnum\axisdefaulttryminticks>\desirednumticks
		\expandafter\desirednumticks\axisdefaulttryminticks
	\fi
	\ifcase\csname axis@#1mode\endcsname
		% compute tick := MIN,MIN+H,....,MAX
		\let\MINH=\pgf@xa
		\let\H=\pgf@xb
		\let\MAX=\axis@tmpa
		\let\MIN=\axis@tmpb
			% compute step size 'H':
			\expandafter\MAX\csname axis@#1max\endcsname pt
			\advance\MAX by0.001pt% avoid round errors
			%\expandafter\MIN\the\c@pgf@counta pt
			\expandafter\MIN\csname axis@#1min\endcsname pt
			\H=\MAX
			\advance\H by-\MIN
			\c@pgf@counta=\desirednumticks
			\advance\c@pgf@counta by-1
			\divide\H by\c@pgf@counta
%\message{determining ticks for #1-axis: Wr := (width/max space between ticks) = \the\Wr, desirednumticks=max(\axisdefaulttryminticks, trunc(Wr)) = \the\desirednumticks, H=(axis range/(desirednumticks-1)) = \the\H}%
			%
			% SEARCH for the NEXT FEASABLE H.
			% 
			\edef\Hmacro{\pgf@sys@tonumber\H}%
			\ifaxis@is@datascaled
				\expandafter\axis@data@scale@inverse@trafo\Hmacro\to\Hmacro
			\else
				\expandafter\sciparsesignsingle\expandafter{\Hmacro}\Hmacro
			\fi
			\scigetcomponents\Hmacro\H@S\H@M\H@E
%\message{Got T^{-1}(H) = [\H@S] \H@M * 10^\H@E}%
			% modify the mantisse:
			\expandafter\H\H@M pt
			\ifdim\H<2pt
				\ifdim\H<1.5pt
					\def\H@M{1.0}%
				\else
					\def\H@M{2.0}%
				\fi
			\else
				\ifdim\H<4.9999pt
					\ifdim\H<3.5pt
						\def\H@M{2.0}%
					\else
						\def\H@M{5.0}%
					\fi
				\else
					\ifdim\H<7.5pt
						\def\H@M{5.0}%
					\else
						\def\H@M{1.0}%
						\expandafter\c@pgf@counta\H@E
						\advance\c@pgf@counta by1
						\edef\H@E{\the\c@pgf@counta}%
					\fi
				\fi
			\fi
			\scisetcomponents\Hmacro\H@S\H@M\H@E
			\ifaxis@is@datascaled
				\axis@data@scale@trafo\Hmacro\to\Hmacro
			\else
				\scitofixedsingle\Hmacro\Hmacro
			\fi
%\message{I have computed H=\Hmacro}%
			\expandafter\H\Hmacro pt
%\message{final H=\the\H}%
			%
			% Now, we want to activate the Tick set {i*H, i in \Z}
			% compute I such that
			%   xmin = I * H + rest;  |rest| < H
			% -> I = round(xmin/H)
			% -> MIN = I * H
			\pgfmathlog@invoke@expanded\pgfmathdivide@{%
				{\pgf@sys@tonumber\MIN}%
				{\pgf@sys@tonumber\H}%
			}%
			\pgfmathsetcount{\c@pgf@counta}{\pgfmathresult}%
			\ifdim\MIN<0pt
				% the truncation rounds TOWARDS 0 which is not what I want.
				\advance\c@pgf@counta by-1
			\fi
			\MIN=\H
			\multiply\MIN by\c@pgf@counta
			\MINH=\MIN
			\advance\MINH by\H
		\xdef\axis@TMP{\pgf@sys@tonumber{\MIN},\pgf@sys@tonumber{\MINH},...,\pgf@sys@tonumber{\MAX}}%
		\aftergroup\axis@needs@check@uniformtickfalse
	\or
		\expandafter\ifx\csname axis@#1tickten\endcsname\empty
			% I want ticks at 10^k. So determine k_min and k_max.
			%
			% FIXME: optimize!
			\pgfmathsetcount{\c@pgf@counta}{\csname axis@#1min\endcsname*\reciproc@logten-1}%
			\pgfmathsetmacro{\tmp@min}{\c@pgf@counta*\logten}%
			\pgfmathsetcount{\c@pgf@counta}{\csname axis@#1max\endcsname*\reciproc@logten}%
			\pgfmathsetmacro{\tmp@max}{\c@pgf@counta*\logten}%
			\pgfmathadd\tmp@min\logten%
			\xdef\axis@TMP{\tmp@min,\pgfmathresult,...,\tmp@max}%
			\aftergroup\axis@needs@check@uniformtickfalse
		\else
			\edef\axis@TMP{\csname axis@#1tickten\endcsname}%
			\expandafter\axis@compute@tick@times@logten\axis@TMP\to\axis@TMP
			\aftergroup\axis@needs@check@uniformticktrue
		\fi
	\fi
	\endgroup
	\expandafter\let\csname axis@#1tick\endcsname=\axis@TMP
%\message{pgfplots.sty: #1tick set to \csname axis@#1tick\endcsname [#1mode=\the\csname axis@#1mode\endcsname,  #1min=\csname axis@#1min\endcsname, #1max=\csname axis@#1max\endcsname].}%
}

% Helper method for 
%  \axis@apply@data@scale@trafo@to@options@for
% #1: the ticks
% #2: the trafo macro name (the form taking three args)
% #3: the output macro name
\long\def\axis@apply@data@scale@trafo@to@user@ticks#1#2\to#3{%
	\let#3=\empty
	\foreach \axis@TMPB in {#1} {%
		\expandafter\sciparsesign\expandafter{\axis@TMPB}\sci@S\sci@M\sci@E
		#2\sci@S\sci@M\sci@E\to\axis@TMPB
		\ifx#3\empty
			\xdef#3{\axis@TMPB}%
		\else
			\xdef#3{#3,\axis@TMPB}%
		\fi
	}%
	%
}%

% helper for \axis@apply@data@scale@trafo@to@options@for.
\def\axis@compute@number@order@for@trafo@isdimen#1\tocount#2{%
	\edef\axis@TMP{\pgf@sys@tonumber{#1}}%
	\expandafter\sciparsesign\expandafter{\axis@TMP}\S\M\E
	\expandafter#2\E\relax
	\advance#2 by1
}

% helper for \axis@apply@data@scale@trafo@to@options@for.
% 
\def\axis@compute@number@order@for@trafo@isfloat#1\tocount#2{%
	\scigetcomponents#1\S\M\E
	\expandafter#2\E\relax
	\advance#2 by1
}

% Initialises the data scale transformation and applies it to any
% user specified options.
%
% PRECONDITION:
%   - all axis limits are available in float representation
%     (i.e. with \scisetcomponents)
%   - \axis@set@default@size@options has been called before
% POSTCONDITION:
%   - the scaling transformation is set up,
%   - all axis limits are transformed,
%   - any user input (like ticks and tick labels)
%     will reflect the changes.
\def\axis@apply@data@scale@trafo@to@options@for#1{%
	% initialise data scale transformation 
	%   T(x) = 10^{q-m} * x
	%
	\begingroup
	\let\data@max@order=\c@pgf@counta
	\let\data@cur@order=\c@pgf@countb
	\let\data@dimen=\pgf@xa
	\let\data@dimen@order=\c@pgf@countc
	%
	% Step 1: compute 'm', the data order
	\expandafter\axis@compute@number@order@for@trafo@isfloat
		\csname axis@#1min\endcsname
		\tocount\data@cur@order
	%
	\data@max@order=\data@cur@order
	%
	\expandafter\axis@compute@number@order@for@trafo@isfloat
		\csname axis@#1max\endcsname
		\tocount\data@cur@order
	%
	\ifnum\data@cur@order>\data@max@order
		\data@max@order=\data@cur@order
	\fi
	%
	% Step 2: compute 'q', the #1-size of the axis.
	\expandafter\ifx\csname axis@#1\endcsname\empty
		% We have 'width' or 'height'.
		%
		% Use the order of these parameters.
		\def\axis@TMP{#1}%
		\def\axis@TMPB{x}%
		\ifx\axis@TMP\axis@TMPB
			\expandafter\data@dimen\axis@width\relax
		\else
			\def\axis@TMPB{y}%
			\ifx\axis@TMP\axis@TMPB
				\expandafter\data@dimen\axis@height\relax
			\fi
		\fi
		\axis@compute@number@order@for@trafo@isdimen
			\data@dimen
			\tocount\data@dimen@order
		% This here is to avoid inaccuracies in the final
		% axis rectangle size, see \axis@initsizes:
		\advance\data@dimen@order by-1
	\else
		% FIXME:
		% we have either the 'x=1cm' or 'y=1cm' option!
		% How should I initialise the trafo!?
		\data@dimen@order=3
	\fi
	%
%\message{Direction #1: data max order=\the\data@max@order;  data dimen order=\the\data@dimen@order. }%
	\advance\data@dimen@order by-\data@max@order
	\xdef\axis@TMP{\the\data@dimen@order}%
	\endgroup
%\message{Initialising the data scale transformation in direction #1 to \axis@TMP...}%
	% COMPLETE INITIALISATION:
	\ifaxis@EMERGENCY@FORCE@DATA@TRAFO@TO@IDENTITY
		\message{WARNING: the automatic scaling of input data has been DISABLED to allow axispath commands [otherwise, axispath commands would not know of the pgfplots scalings - leading to wrong images). DISABLING THE DATA SCALING LIMITS THE DATA RANGE! I hope I can fix this issue as soon as possible. Please take a look at the manual for more information. If you get 'OVERFLOW' or 'UNDERFLOW' errors, you may need to disable the axispath.}%
		\def\axis@TMP{0}%
		\expandafter\let\csname axis@data@scale@trafo@SHIFT@#1\endcsname\axis@TMP
	\else
		\expandafter\let\csname axis@data@scale@trafo@SHIFT@#1\endcsname\axis@TMP
	\fi
	%
	% ... and apply transformation to any user input
	%
	% Transform axis limits:
	\expandafter\expandafter\csname axis@datascaletrafo@#1\endcsname\csname axis@#1min\endcsname\to\axis@TMP
	\expandafter\let\csname axis@#1min\endcsname=\axis@TMP
	%
	\expandafter\expandafter\csname axis@datascaletrafo@#1\endcsname\csname axis@#1max\endcsname\to\axis@TMP
	\expandafter\let\csname axis@#1max\endcsname=\axis@TMP
	%
	% Convert any user-specified ticks:
	\edef\axis@TMP{\csname axis@#1tick\endcsname}%
	% this here should also work with 'xtick=\empty', the "No tick" command.
	\ifx\axis@TMP\empty
	\else
%\message{Converting #1tick='\csname axis@#1tick\endcsname'}%
		\pgfplots@toka=\expandafter{\csname axis@datascaletrafo@#1@three\endcsname}%
		\edef\axis@TMP{{\csname axis@#1tick\endcsname}\the\pgfplots@toka}%
		\expandafter\axis@apply@data@scale@trafo@to@user@ticks\axis@TMP\to\axis@TMPC
		\expandafter\let\csname axis@#1tick\endcsname=\axis@TMPC
	\fi
	%
	% Transform any explicit axis unit scalings:
	\expandafter\ifx\csname axis@#1\endcsname\empty
	\else
%\message{Converting #1 unit scale='\csname axis@#1\endcsname' ... }%
		\expandafter\pgfmathparse\expandafter{\csname axis@#1\endcsname}%
		\expandafter\expandafter\csname axis@inverse@datascaletrafo@tofixed@#1\endcsname\pgfmathresult\to\axis@TMP
		\edef\axis@TMP{\axis@TMP pt}%
		\expandafter\edef\csname axis@#1\endcsname{\axis@TMP}%
%\message{to #1='\csname axis@#1\endcsname'.}%
	\fi
}

\def\axis@determinedefaultvalues{%
	\ifx\axis@xmin\empty
		\errmessage{Sorry, the argument 'xmin=NUM' is mandatory to draw axes }%
		\def\axis@xmin{0}%
	\fi
	\ifx\axis@xmax\empty
		\errmessage{Sorry, the argument 'xmax=NUM' is mandatory to draw axes }%
		\def\axis@xmax{1}%
	\fi
	\ifx\axis@ymin\empty
		\errmessage{Sorry, the argument 'ymin=NUM' is mandatory to draw axes }%
		\def\axis@ymin{0}%
	\fi
	\ifx\axis@ymax\empty
		\errmessage{Sorry, the argument 'ymax=NUM' is mandatory to draw axes }%
		\def\axis@ymax{1}%
	\fi
	%
	\axis@set@default@size@options
	%
	\ifaxis@float@numerics@mode@x
		\axis@apply@data@scale@trafo@to@options@for x%
	\fi
	\ifaxis@float@numerics@mode@y
		\axis@apply@data@scale@trafo@to@options@for y%
	\fi
	%
	\ifnum\axis@xmode=0
		\axis@xminorticksfalse
	\fi
	\ifnum\axis@ymode=0
		\axis@yminorticksfalse
	\fi
	%
	\axis@init@enlarge@limit@booleans
	\ifaxis@enlargelimits
		% relax the sizes.
		%
		% Idea: if the user chose his xmin,xmax tight to his data,
		% this here will look better.
		\axis@enlarge@limit@for x
		\axis@enlarge@limit@for y
	\else
		\ifaxis@enlargelimits@auto
			\ifaxis@hide
				% there is no axis, so skip this enlargement (unless
				% the user explizitly requests it)
			\else
				% FIXME : this here should be user-configurable!
				\ifaxis@autocompute@xlim
					\axis@enlarge@limit@for x
				\fi
				\ifaxis@autocompute@ylim
					\axis@enlarge@limit@for y
				\fi
			\fi
		\fi
	\fi
	%
	\axis@avoid@empty@axis@range@for x%
	\axis@avoid@empty@axis@range@for y%
	%
	\axis@initsizes
	%
	\newif\ifaxis@xisuniform
	\newif\ifaxis@yisuniform
	\axis@xisuniformtrue
	\axis@yisuniformtrue
	\newif\ifaxis@needs@check@uniformtick
	\axis@needs@check@uniformticktrue
	\ifx\axis@xtick\empty
		\axis@assign@default@tick@foraxis{x}%
	\fi
	\ifaxis@needs@check@uniformtick
		\ifnum\axis@xmode=1
			\expandafter\axis@checkisuniformLOGtick\expandafter{\axis@xtick}%
		\fi
		\ifaxis@isuniformtick
			\axis@xisuniformtrue
		\else
			\axis@xminorticksfalse
			\axis@xisuniformfalse
		\fi
	\fi
	%
	%
	%
	\axis@needs@check@uniformticktrue
	\ifx\axis@ytick\empty
		\axis@assign@default@tick@foraxis{y}%
	\fi
	\ifaxis@needs@check@uniformtick
		\ifnum\axis@ymode=1
			\expandafter\axis@checkisuniformLOGtick\expandafter{\axis@ytick}%
		\fi
		\ifaxis@isuniformtick
			\axis@yisuniformtrue
		\else
			\axis@yminorticksfalse
			\axis@yisuniformfalse
		\fi
	\fi
	\ifx\axis@xticklabel\empty
		\ifcase\axis@xmode
			\def\axis@xticklabel{\axisdefaultticklabel}%
		\or
			\def\axis@xticklabel{\axisdefaultticklabellog}%
		\fi
	\fi
	\ifx\axis@yticklabel\empty
		\ifcase\axis@ymode
			\def\axis@yticklabel{\axisdefaultticklabel}%
		\or
			\def\axis@yticklabel{\axisdefaultticklabellog}%
				%--------------------------------------------------
				% \def\axis@yticklabel{%
				% 	\pgfmathexp\tick
				% 	\expandafter\skipsuffixzero\pgfmathresult|%
				% 	$\pgfmathresult$}%
				%-------------------------------------------------- 
		\fi
	\fi
}


% Helper method for initsizes.
%
% It computes a scaling such that \axis@width = SCALE * ACTUAL WIDTH.
% 
% The actual width is 
% 	c + x*(xmax-xmin)
% based on
% - x*xmax = \axis@xcoordmaxTEX
% - x*xmin = \axis@xcoordminTEX
% - c = estimated, a constant for the axis label/tick labels
%
% Arguments: 
% #1: the output argument for the SCALE.
\def\axis@initsizes@getXscale\into#1{%
	\expandafter\axis@tmpa\axis@width\relax
	% EXPECTED WIDTH = X = \axis@width
	% ACTUAL WIDTH = c + x * (xmax-xmin)
	% where c is a CONSTANT (for the axis labels/tick labels).
	% -> \axis@tmpXscale = (X - c) / (x *(xmax-xmin))
	%
	% \axis@tmpa := X-c:
	\ifaxis@scale@only@axis
	\else
		\advance\axis@tmpa by-45pt% FIXME determine 'c' correctly!
	\fi
	\ifdim\axis@tmpa<0pt
		\errmessage{Error: Plot width `\axis@width' is too small. This can't be realised while maintaining constant width for y-labels. Sorry, label width are only approximate. You will need to adjust your width.}%
		\axis@tmpa=0pt
	\fi
	% \axis@tmpb := x*(xmax-xmin):
	\axis@tmpb=\axis@xcoordmaxTEX
	\advance\axis@tmpb by-\axis@xcoordminTEX
	\pgfmathlog@invoke@expanded\pgfmathdivide@{%
		{\pgf@sys@tonumber\axis@tmpa}%
		{\pgf@sys@tonumber\axis@tmpb}%
	}%
	\let#1=\pgfmathresult
%\message{pgfplots.sty: Computing 'x' such that 'width = c + x*(xmax-xmin)';
%	c=estimated, 
%	width-c =\the\axis@tmpa,  
%	x*(xmax[=\the\axis@xcoordmaxTEX] - xmin[=\the\axis@xcoordminTEX)]) = \the\axis@tmpb  
%	-> x-scale =#1 }%
}

% The same as \axis@initsizes@getXscale, just for the height.
\def\axis@initsizes@getYscale\into#1{%
	\expandafter\axis@tmpa\axis@height\relax
	% EXPECTED WIDTH = X = \axis@width
	% ACTUAL WIDTH = c + x * (xmax-xmin)
	% where c is a CONSTANT (for the axis labels/tick labels).
	% -> \axis@tmpXscale = (X - c) / (x *(xmax-xmin))
	%
	% \axis@tmpa := X-c:
	\ifaxis@scale@only@axis
	\else
		\advance\axis@tmpa by-45pt\relax% FIXME determine 'c' correctly!
	\fi
	\ifdim\axis@tmpa<0pt
		\errmessage{Error: Plot height `\axis@height' is too small. This can't be realised while maintaining constant height for x-labels. Sorry, label heights are only approximate. You will need to adjust your height.}%
		\axis@tmpa=0pt
	\fi
	% \axis@tmpb := x*(xmax-xmin):
	\axis@tmpb=\axis@ycoordmaxTEX
	\advance\axis@tmpb by-\axis@ycoordminTEX
	\pgfmathlog@invoke@expanded\pgfmathdivide@{%
		{\pgf@sys@tonumber\axis@tmpa}%
		{\pgf@sys@tonumber\axis@tmpb}%
	}%
	\let#1=\pgfmathresult
%\message{pgfplots.sty: Computing 'y' such that 'height = c + y*(ymax-ymin)';
%	height=\axis@height,
%	c=estimated,
%	height-c =\the\axis@tmpa,  
%	y*(ymax[=\the\axis@ycoordmaxTEX] - ymin[=\the\axis@ycoordminTEX)]) = \the\axis@tmpb  
%	-> y-scale =#1 }%
}


% Checks whether axis limits in coordinate #1 are approximately equal.
%
% If that is the case, force a non-zero width of the range.
%
\def\axis@avoid@empty@axis@range@for#1{%
	% Check if axis limits are empty:
	\begingroup
	\expandafter\let\expandafter\if@cur@is@scaled\csname ifaxis@float@numerics@mode@#1\endcsname
	\expandafter\let\expandafter\min\csname axis@#1min\endcsname
	\expandafter\let\expandafter\max\csname axis@#1max\endcsname
	\let\min@d=\pgf@xa
	\let\max@d=\pgf@xb
	\let\diff=\pgf@xc
	\newif\ifrange@is@approx@equal
	\expandafter\min@d\min pt
	\expandafter\max@d\max pt
	\diff=\max@d
	\advance\diff by-\min@d
	% FIXME : I need a RELATIVE check here!
	% but: real number point division is expensive
	\if@cur@is@scaled
		% this here should be sufficient because the axis
		% has absolute values of order O( 10^3 ) or so.
		\ifdim\diff<1pt
			\range@is@approx@equaltrue
		\fi
	\else
		% there is no data scaling, so I should be much more defensive
		% with absolute thresholds...
		\ifdim\diff<0.05pt
			\range@is@approx@equaltrue
		\fi
	\fi
	\ifrange@is@approx@equal
%\message{avoid range is approx equal for coord #1: MODIFYING (\min,\max)...}%
		% the case \min ~= \max
		%
		% enlarge \max and shrink \min:
		\ifdim\max@d<0pt
			\ifdim\max@d<-1pt
				\max@d=0.8\max@d
				\min@d=1.2\min@d
			\else
				\advance\max@d by-1pt
				\advance\min@d by1pt
			\fi
		\else
			\ifdim\max@d>1pt
				\max@d=1.2\max@d
				\min@d=0.8\min@d
			\else
				\ifdim\max@d=0pt
					\if@cur@is@scaled
						% we can't simply add a constant in the
						% transformed range.
						%
						% So: set limits to [-1,1] = [-1.0e0,+1.0e0]
						\def\sci@S{2}%
						\def\sci@M{1.0}%
						\def\sci@E{0}%
						\csname axis@datascaletrafo@#1@three\endcsname\sci@S\sci@M\sci@E\to\min
						\def\sci@S{1}%
						\def\sci@M{1.0}%
						\def\sci@E{0}%
						\csname axis@datascaletrafo@#1@three\endcsname\sci@S\sci@M\sci@E\to\max
%\message{[trafo shift = \csname axis@data@scale@trafo@SHIFT@#1\endcsname; setting limits -1:1]}%
						\expandafter\min@d\min pt
						\expandafter\max@d\max pt
					\else
						\advance\max@d by1pt
						\advance\min@d by-1pt
					\fi
				\else
					\advance\max@d by1pt
					\advance\min@d by-1pt
				\fi
			\fi
		\fi
		\xdef\axis@TMP{\pgf@sys@tonumber{\min@d}}%
		\xdef\axis@TMPB{\pgf@sys@tonumber{\max@d}}%
%\message{ -> #1 = \axis@TMP : \axis@TMPB;}%
	\else
		\global\let\axis@TMP=\min%
		\global\let\axis@TMPB=\max%
	\fi
	\endgroup
	\expandafter\let\csname axis@#1min\endcsname=\axis@TMP
	\expandafter\let\csname axis@#1max\endcsname=\axis@TMPB
}

% PRECONDITION:
% 	none
% POSTCONDITION:
% 	\axis@default@aspect@ratio is set.
\def\axis@compute@default@aspect@ratio{%
	\expandafter\pgfmath@x\axisdefaultwidth
	\expandafter\pgfmath@y\axisdefaultheight
	\pgfmathlog@invoke@expanded\pgfmathdivide@{%
		{\pgf@sys@tonumber{\pgfmath@x}}%
		{\pgf@sys@tonumber{\pgfmath@y}}%
	}%
	\let\axis@default@aspect@ratio=\pgfmathresult
}

\def\axis@set@default@size@options{%
	% The axes 'x' and 'y' vectors will be scaled such that the total
	% size is (\axisdefaultwidth, \axisdefaultheight).
	%
	% If the user specifies ONE of width OR height, 
	% the plot will be resized; keeping the aspect ratio.
	%
	\let\axis@default@aspect@ratio=\empty
	% CASES:
	% hasx := 'x' option non-empty
	% hasy := 'y' option non-empty
	% W := 'width' option non-empty
	% H := 'height' option non-empty
	%
	% hasx = 1 -> width is not interesting; we use 'x' option.
	% hasx = 0 -> determine final width:
	% 		W H
	% 		0 0 -> \axisdefaultwidth 
	% 		0 1 -> determine width out of H and the default aspect ratio
	% 		1 X -> ok, use the user parameter.
	%
	% hasy = 1 -> height is not interesting, we use 'y' option.
	% hasy = 0 -> determine final height:
	% 		W H
	% 		0 0 -> \axisdefaultheight
	% 		X 1 -> ok, use the user parameter
	% 		1 0 -> determine height out of W and the default aspect ratio
	%
	\ifx\axis@x\empty
		\ifx\axis@y\empty
			% hasx=0, hasy=0 
			%
			% -> KEEP ASPECT RATIO if just one W, or H is given!
			\ifx\axis@width\empty
				\ifx\axis@height\empty
					% The case hasx=0, hasy=0,  W=0 H=0:
					\let\axis@width=\axisdefaultwidth
					\let\axis@height=\axisdefaultheight
				\else
					% The case hasx=0, hasy=0,  W=0 H=1:
					\axis@compute@default@aspect@ratio
					\expandafter\pgfmath@y\axis@height
					\pgfmathlog@invoke@expanded\pgfmathmultiply@{%
						{\pgf@sys@tonumber{\pgfmath@y}}%
						{\axis@default@aspect@ratio}%
					}%
					\edef\axis@width{\pgfmathresult pt}%
				\fi
			\else
				\ifx\axis@height\empty
					% The case hasx=0, hasy=0,  W=1 H=0:
					\axis@compute@default@aspect@ratio
					\expandafter\pgfmath@x\axis@width
					\pgfmathlog@invoke@expanded\pgfmathdivide@{%
						{\pgf@sys@tonumber{\pgfmath@x}}%
						{\axis@default@aspect@ratio}%
					}%
					\edef\axis@height{\pgfmathresult pt}%
				\else
					% The case hasx=0, hasy=0,  W=1 H=1:
				\fi
			\fi
		\else
			% hasx=0, hasy=1, W=0:
			\ifx\axis@width\empty
				\let\axis@width=\axisdefaultwidth
			\fi
		\fi
	\else
		\ifx\axis@y\empty
			% hasx=1, hasy=0, H=0
			\ifx\axis@height\empty
				\let\axis@height=\axisdefaultheight
			\fi
		\fi
	\fi
}

% PRECONDITION: 
% 	- final axis limits are given in transformed range
% 	-  \axis@set@default@size@options has been invoked before
% POSTCONDITION: 
% 	- the current x- and y unit vectors are changed;
% 	- \axis@[xy]coord{min,max}TEX  are set
%
\def\axis@initsizes{%
	% INIT.
	%
	%
	\pgfpointxy{\axis@xmin}{\axis@ymin}%
	\axis@xcoordminTEX=\pgf@x
	\axis@ycoordminTEX=\pgf@y
	\pgfpointxy{\axis@xmax}{\axis@ymax}%
	\axis@xcoordmaxTEX=\pgf@x
	\axis@ycoordmaxTEX=\pgf@y
	%
	%
	%-----------------------------------------
	% PROCESS THE 'width' and 'height' options
	%-----------------------------------------
	%
	% FIXME: make these variables LOCAL:
	%
	\let\axis@rectangle@width=\empty
	\let\axis@rectangle@height=\empty
	%
	\ifx\axis@x\empty
		\ifx\axis@width\empty
			\errmessage{INTERNAL LOGIC ERROR! WIDTH NOT SET}%
		\fi
		\axis@initsizes@getXscale\into\axis@tmpXscale
		\ifaxis@scale@only@axis
			\let\axis@rectangle@width=\axis@width
		\fi
	\else
		\def\axis@tmpXscale{1}%
	\fi
	%
	\ifx\axis@y\empty
		\ifx\axis@height\empty
			\errmessage{INTERNAL LOGIC ERROR! HEIGHT NOT SET}%
		\fi
		\axis@initsizes@getYscale\into\axis@tmpYscale
		\ifaxis@scale@only@axis
			\let\axis@rectangle@height=\axis@height
		\fi
	\else
		\def\axis@tmpYscale{1}%
	\fi
	%
	% 
	% assert( \axis@tmpXscale != \empty && \axis@tmpYscale != \empty )
	%
	% Apply scaling:
	\pgfpointxy{\axis@tmpXscale}{\axis@tmpYscale}%
	\axis@tmpa=\pgf@x
	\axis@tmpb=\pgf@y
	\ifx\axis@x\empty
		\pgfsetxvec{\pgfpoint{\axis@tmpa}{0pt}}%
	\else
		\pgfsetxvec{\pgfpoint{\axis@x}{0pt}}%
	\fi
	\ifx\axis@y\empty
		\pgfsetyvec{\pgfpoint{0pt}{\axis@tmpb}}%
	\else
		\pgfsetyvec{\pgfpoint{0pt}{\axis@y}}%
	\fi
	%
	% Determine final rectangle dimensions.
	% There are the following cases: 
	% 1. the user really wants a fixed dimension,
	%    i.e. he used 'scale only axis'.
	%    Then, we have to work to get the correct dimension!
	%
	%    Up to now, the scaling mechanism looses to many significant
	%    digits such that the final width/height differs by 1-2 pt.
	%
	%    If I am not mistaken, this does ONLY affect the final size,
	%    not the relative plot precision.
	%    
	%    FIXME : really compute the plot precision!
	% 
	% 2. The use specified width and/or height, but not 'scale only
	%    axis'. Accept inaccurate final widths/heights (see above).
	%
	% 3. The user supplied 'x' and or 'y'. Simply use them, its
	% accurate.
	%
	\pgfpointxy{\axis@xmin}{\axis@ymin}%
	\axis@xcoordminTEX=\pgf@x
	\axis@ycoordminTEX=\pgf@y
	\pgfpointxy{\axis@xmax}{\axis@ymax}%
	\ifx\axis@rectangle@width\empty
		\axis@xcoordmaxTEX=\pgf@x
	\else
		% this 'if' here should only make a difference of about
		% 1-2pt, not more.
		%
		% and I am quite sure that this inaccuracy (and this
		% work-around) only affects the
		% final size, not the relative plot accuracy.
		\axis@xcoordmaxTEX=\axis@xcoordminTEX
		\expandafter\advance\expandafter\axis@xcoordmaxTEX\axis@width
	\fi
	\ifx\axis@rectangle@height\empty
		\axis@ycoordmaxTEX=\pgf@y
	\else
		\axis@ycoordmaxTEX=\axis@ycoordminTEX
		\expandafter\advance\expandafter\axis@ycoordmaxTEX\axis@height
	\fi
%--------------------------------------------------
% \begingroup
% \pgf@x=\axis@xcoordmaxTEX\advance\pgf@x by-\axis@xcoordminTEX
% \pgf@y=\axis@ycoordmaxTEX\advance\pgf@y by-\axis@ycoordminTEX
% \message{Axis scaling x=\axis@tmpXscale, y=\axis@tmpYscale\ yields lower-left-corner (\axis@xmin,\axis@ymin) = (\the\axis@xcoordminTEX,\the\axis@ycoordminTEX) and upper right (\axis@xmax,\axis@ymax) = (\the\axis@xcoordmaxTEX,\the\axis@ycoordmaxTEX).   Axis dimensions are width=\the\pgf@x, height=\the\pgf@y.}%
% \endgroup
%-------------------------------------------------- 
}

\def\axis@BEGIN@init@and@draw@axis{%
	\axis@determinedefaultvalues
	
	% move the anchor to (0,0):
	\expandafter\ifcase\axis@anchorchoicenum
	% north:
		\begin{scope}[
			yshift=-\axis@ycoordmaxTEX,
			xshift=-0.5\axis@xcoordminTEX-0.5\axis@xcoordmaxTEX
		]
	\or% north west:
		\begin{scope}[
			yshift=-\axis@ycoordmaxTEX,
			xshift=-\axis@xcoordminTEX
		]
	\or% west:
		\begin{scope}[
			yshift=-0.5\axis@ycoordminTEX-0.5\axis@ycoordmaxTEX,
			xshift=-\axis@xcoordminTEX
		]
	\or% south west:
		\begin{scope}[
			yshift=-\axis@ycoordminTEX,
			xshift=-\axis@xcoordminTEX
		]
	\or% south:
		\begin{scope}[
			yshift=-\axis@ycoordminTEX,
			xshift=-0.5\axis@xcoordminTEX-0.5\axis@xcoordmaxTEX
		]
	\or% south east:
		\begin{scope}[
			yshift=-\axis@ycoordminTEX,
			xshift=-\axis@xcoordmaxTEX
		]
	\or% east:
		\begin{scope}[
			yshift=-0.5\axis@ycoordminTEX-0.5\axis@ycoordmaxTEX,
			xshift=-\axis@xcoordmaxTEX
		]
	\or% north east:
		\begin{scope}[
			yshift=-\axis@ycoordmaxTEX,
			xshift=-\axis@xcoordmaxTEX
		]
	\or% center
		\begin{scope}[
			yshift=-0.5\axis@ycoordminTEX-0.5\axis@ycoordmaxTEX,
			xshift=-0.5\axis@xcoordminTEX-0.5\axis@xcoordmaxTEX
		]
	\fi

	\begin{scope}
	\ifaxis@hide
		\clip
						(\axis@xcoordminTEX,	\axis@ycoordminTEX) 
			rectangle	(\axis@xcoordmaxTEX,	\axis@ycoordmaxTEX);
	\else

		% X-Achsenbeschriftung:
		% LADE DIE \axis@xtick -variable REIN
		\expandafter\axis@drawxaxis\expandafter{\axis@xtick}
		%
		% Y-Achsen und Achsenbeschriftung:
		\expandafter\axis@drawyaxis\expandafter{\axis@ytick}%
		\draw[clip]
						(\axis@xcoordminTEX,	\axis@ycoordminTEX) 
			rectangle	(\axis@xcoordmaxTEX,	\axis@ycoordmaxTEX);

	\fi
}

\def\axis@END@init@and@draw@axis{%
	\end{scope}%
}

% Writes output to \axis@TMP
\def\axis@filter@input@ticks@with@log#1{%
	\let\axis@TMP=\empty
	\foreach \axis@TMPB in {#1} {%
		\expandafter\pgfmathlog@\expandafter{\axis@TMPB}%
		\ifx\axis@TMP\empty
			\xdef\axis@TMP{\pgfmathresult}%
		\else
			\xdef\axis@TMP{\axis@TMP,\pgfmathresult}%
		\fi
	}%
}

\tikzdeclarecoordinatesystem{axis}{\axis@evalute@tikz@coord@system@interface#1\axis@coord@end}


% Assigns \pgfmathresult := canvas coordinate (#2) for axis #1.
\long\def\axis@evalute@tikz@coord@system@interface@for#1#2{%
	\expandafter\let\expandafter\if@datascaled@cur\csname ifaxis@float@numerics@mode@#1\endcsname
	\expandafter\ifcase\csname axis@#1mode\endcsname
		\if@datascaled@cur
			\csname axis@datascaletrafo@fromfixed@#1\endcsname#2\to\pgfmathresult
		\else
			\def\pgfmathresult{#2}%
		\fi
	\or
		\pgfmathlog@{#2}%
	\fi
}

\long\def\axis@evalute@tikz@coord@system@interface#1,#2\axis@coord@end{%
	\begingroup
	\axis@evalute@tikz@coord@system@interface@for{x}{#1}%
	\let\axis@evaluate@tikz@coord@x=\pgfmathresult
	\axis@evalute@tikz@coord@system@interface@for{y}{#2}%
	\xdef\axis@TMP{\axis@evaluate@tikz@coord@x pt}%
	\xdef\axis@TMPB{\pgfmathresult pt}%
	\endgroup
	\pgfpointxy{\axis@TMP}{\axis@TMPB}%
}

% In case of (semi-) logplots, this command will 
% - assign a filter which invokes \pgfmathlog@{} for each coordinate
% - replace any user-specified coordinate by its log.
%
% All subsequent commands will then work with logarithmic coordinates.
%
% @see pgfmathlog.sty for details about the implementation of log().
%
% PRECONDITION: 
% - The user input options have been set correctly, 
% - the option processing has not yet begun
%
% POSTCONDITION: 
% - any user input for log-axis has been replaced by its log
% - coordinate filters to compute logs are installed
%
% See also:
%     \axis@apply@data@scale@trafo@to@options@for
\def\axis@prepare@coord@filtering@for#1{%
	\expandafter\ifcase\csname axis@#1mode\endcsname
		\ifaxis@disabledatascaling
			\csname axis@float@numerics@mode@#1false\endcsname
			\axis@float@numerics@modefalse
		\else
			\csname axis@float@numerics@mode@#1true\endcsname
			\axis@float@numerics@modetrue
		\fi
		\ifaxis@float@numerics@mode
			% Install coordinate filters that
			% - read input as normalised floating point numbers,
			% - return [SIGN][MANTISSE]eEXPONENT
			% Motivation: 
			% 1. we can compute axis limits using such data
			% 2. we can remember the floating point representation for 
			%    the data scaling transformation.
			% ATTENTION:
			% this here is a preprocessing step! You will need to
			% apply the data scaling later!
			% see 
			% \axis@apply@data@scaletrafo@to@plot@data
			\expandafter\let\expandafter\axis@TMP\csname axis@#1filter\endcsname
			\ifx\axis@TMP\empty
				\expandafter\def\csname addplot@float@numerics@#1filter\endcsname##1\to##2{%
					\sciparsesign{##1}\axis@tmp@S\axis@tmp@M\axis@tmp@E
					\scisetcomponents{##2}\axis@tmp@S\axis@tmp@M\axis@tmp@E
					\edef##2{\axis@tmp@S\axis@tmp@M e\axis@tmp@E}%
				}%
			\else
				\expandafter\let\csname axis@#1filter@orig\endcsname=\axis@TMP
				\expandafter\def\csname addplot@float@numerics@#1filter\endcsname##1\to##2{%
					\csname axis@#1filter@orig\endcsname##1\to##2\relax
					\ifx##2\empty
					\else
						\expandafter\sciparsesign\expandafter{##2}\axis@tmp@S\axis@tmp@M\axis@tmp@E
						\scisetcomponents{##2}\axis@tmp@S\axis@tmp@M\axis@tmp@E
						\edef##2{\axis@tmp@S\axis@tmp@M e\axis@tmp@E}%
					\fi
				}%
			\fi
			\expandafter\let\expandafter\axis@TMP\csname addplot@float@numerics@#1filter\endcsname
			\expandafter\let\csname axis@#1filter\endcsname\axis@TMP
			%
			% Check for any existing axis limits:
			\expandafter\let\expandafter\axis@TMP\csname axis@#1min\endcsname
			\ifx\axis@TMP\empty
			\else
				\expandafter\sciparsesign\expandafter{\axis@TMP}\axis@tmp@S\axis@tmp@M\axis@tmp@E
				\expandafter\scisetcomponents\csname axis@#1min\endcsname\axis@tmp@S\axis@tmp@M\axis@tmp@E
			\fi
			\expandafter\let\expandafter\axis@TMP\csname axis@#1max\endcsname
			\ifx\axis@TMP\empty
			\else
				\expandafter\sciparsesign\expandafter{\axis@TMP}\axis@tmp@S\axis@tmp@M\axis@tmp@E
				\expandafter\scisetcomponents\csname axis@#1max\endcsname\axis@tmp@S\axis@tmp@M\axis@tmp@E
			\fi
		\fi
	\or
		\ifaxis@disablelogfilter
		\else
			% any user-specified axis limits:
			\expandafter\let\expandafter\axis@TMP\csname axis@#1min\endcsname
			\ifx\axis@TMP\empty
			\else
				\expandafter\pgfmathlog@\expandafter{\axis@TMP}%
				\expandafter\let\csname axis@#1min\endcsname=\pgfmathresult
			\fi
			\expandafter\let\expandafter\axis@TMP\csname axis@#1max\endcsname
			\ifx\axis@TMP\empty
			\else
				\expandafter\pgfmathlog@\expandafter{\axis@TMP}%
				\expandafter\let\csname axis@#1max\endcsname=\pgfmathresult
			\fi
			%
			% any user specified axis ticks:
			\expandafter\let\expandafter\axis@TMP\csname axis@#1tick\endcsname
			\ifx\axis@TMP\empty
			\else
				\expandafter\axis@filter@input@ticks@with@log\expandafter{\axis@TMP}%
				\expandafter\edef\csname axis@#1tick\endcsname{\axis@TMP}%
			\fi
			%
			\expandafter\let\expandafter\axis@TMP\csname axis@#1filter\endcsname
			\ifx\axis@TMP\empty
				\expandafter\def\csname addplot@log@compute@#1filter\endcsname##1\to##2{%
					\pgfmathlog@{##1}%
					\let##2=\pgfmathresult
				}%
			\else
				\expandafter\let\csname axis@#1filter@orig\endcsname=\axis@TMP
				\expandafter\def\csname addplot@log@compute@#1filter\endcsname##1\to##2{%
					\pgfmathlog@{##1}%
					\ifx\pgfmathresult\empty
						\let##2=\empty
					\else
						\expandafter\expandafter\csname axis@#1filter@orig\endcsname\pgfmathresult\to##2\relax
					\fi
				}%
			\fi
			\expandafter\let\expandafter\axis@TMP\csname addplot@log@compute@#1filter\endcsname
			\expandafter\let\csname axis@#1filter\endcsname\axis@TMP
		\fi
	\fi
}

\def\axis@create@axis@descriptions{%
	\ifaxis@hide
	\else
		\ifx\axis@xlabel\empty
		\else
			\axisshowxlabel
		\fi
		\ifx\axis@ylabel\empty
		\else
			\axisshowylabel
		\fi
	\fi
	\ifx\axis@title\empty
	\else
		\axisshowtitle
	\fi
	\axis@createlegend
}

% DATA TRANSFORMATION T(x) = X
%
% Input: 
%    a number in the original data range, given in **floating** point representation
% Output: 
%    a fixed point number in transformed range
% @see
% \axis@datascaletrafo@x@three
% \axis@datascaletrafo@fromfixed@x
\def\axis@datascaletrafo@x#1\to#2{%
	\scigetcomponents#1\axis@tmp@S\axis@tmp@M\axis@tmp@E
	\axis@datascaletrafo@x@three\axis@tmp@S\axis@tmp@M\axis@tmp@E\to#2
}

% Overloaded function.
% Input: 
%     The same as above, but with Sign, Mantisse, Exponent.
%     #1,#2 and #3 are expected to be MACRO NAMES.
\def\axis@datascaletrafo@x@three#1#2#3\to#4{%
	\def\axis@TMP{\scimathshift{#1}{#2}{#3}}%
	\expandafter\axis@TMP\expandafter{\axis@data@scale@trafo@SHIFT@x}%
	\scitofixed{#1}{#2}{#3}{#4}%
}

% Overloaded function.
% Input:
%     a FIXED point number instead of a floating point one.
% @see \axis@datascaletrafo@x
\def\axis@datascaletrafo@fromfixed@x#1\to#2{%
	\begingroup
	\sciparsesign{#1}\axis@S\axis@M\axis@E
	\axis@datascaletrafo@x@three\axis@S\axis@M\axis@E\to{#2}%
	\global\let\axis@TMP=#2\relax
	\endgroup
	\let#2=\axis@TMP
}

\def\axis@datascaletrafo@y#1\to#2{%
	\scigetcomponents#1\axis@tmp@S\axis@tmp@M\axis@tmp@E
	\axis@datascaletrafo@y@three\axis@tmp@S\axis@tmp@M\axis@tmp@E\to#2
}
\def\axis@datascaletrafo@y@three#1#2#3\to#4{%
	\def\axis@TMP{\scimathshift{#1}{#2}{#3}}%
	\expandafter\axis@TMP\expandafter{\axis@data@scale@trafo@SHIFT@y}%
	\scitofixed{#1}{#2}{#3}{#4}%
}
\def\axis@datascaletrafo@fromfixed@y#1\to#2{%
	\begingroup
	\sciparsesign{#1}\axis@S\axis@M\axis@E
	\axis@datascaletrafo@y@three\axis@S\axis@M\axis@E\to{#2}%
	\global\let\axis@TMP=#2\relax
	\endgroup
	\let#2=\axis@TMP
}

% INVERSE transformation x = T^{-1}( X )
% Input: 
%    a fixed point number in transformed domain
% Output:
%    a number in the data domain, given in floating point
%    representation
\def\axis@inverse@datascaletrafo@x#1\to#2{%
	\expandafter\sciparsesignsingle\expandafter{#1}#2
	\edef\axis@TMP{\noexpand#2{-\axis@data@scale@trafo@SHIFT@x}}%
	\expandafter\scimathshiftsingle\axis@TMP
}

\def\axis@inverse@datascaletrafo@y#1\to#2{%
	\expandafter\sciparsesignsingle\expandafter{#1}#2
	\edef\axis@TMP{\noexpand#2{-\axis@data@scale@trafo@SHIFT@y}}%
	\expandafter\scimathshiftsingle\axis@TMP
}

% Overloaded function.
%
% In contrast to \axis@inverse@datascaletrafo@x, this method
% returns a number in FIXED point representation.
% @see \axis@inverse@datascaletrafo@x
\def\axis@inverse@datascaletrafo@tofixed@x#1\to#2{%
	\axis@inverse@datascaletrafo@x#1\to{#2}%
	\scitofixedsingle{#2}{#2}%
}
\def\axis@inverse@datascaletrafo@tofixed@y#1\to#2{%
	\axis@inverse@datascaletrafo@y#1\to{#2}%
	\scitofixedsingle{#2}{#2}%
}

\newenvironment{axis}[1][]{%
	\begingroup
%	\def\axis@setkeys{\setkeys*[\prefix]{axis}}%
%\tracingmacros=2\tracingcommands=2
%	\message{Der every-axis-style ist gerade \csname tikz@st@every axis\endcsname}%
%\tracingmacros=0\tracingcommands=0
%    \expandafter\expandafter\expandafter\axis@setkeys
 %   \expandafter\expandafter\expandafter{\csname tikz@st@every axis\endcsname}%
	\begin{scope}[style=every axis,%
		x=1pt,y=1pt% see below
	]
	% The explicit specification of 'x' and 'y' as 1pt is to avoid
	% numeric overflow/underflow during scale computations:
	%
	% The scaling (i.e. proper values for 'x' and 'y') will be
	% determined later-on, dependend on the axis limits.  Since axis
	% limits are implicitly in units of 1pt, it is reasonable to use
	% '1pt' here as well.
	%
	%
%--------------------------------------------------
% \draw[very thin,color=gray,xstep=1,ystep=\logten] 
% 		  		(\xcoordmin\axis@leftover,\ycoordmin) 
% 		grid	(\xcoordmax\axis@rightover,\ycoordmax);
%-------------------------------------------------- 
	\setkeys[\prefix]{axis}{#1}%
	%
	% --------------------
	% Allocations:
	% --------------------
	\listnewempty\axis@plotspeclist
	\listnewempty\axis@legend
	\listnewempty\axis@stored@plot@cmds
	\listnewempty\axis@stored@plot@data
	\newif\ifaxis@autocompute@xlim
	\newif\ifaxis@autocompute@ylim
	\newif\ifaxis@filtercoords
	\newif\ifaxis@float@numerics@mode@x
	\newif\ifaxis@float@numerics@mode@y
	\newif\ifaxis@float@numerics@mode
	% rename '\ifaxis@hide axis'  to mask the white space:
	\expandafter\let\expandafter\ifaxis@hide\csname ifaxis@hide axis\endcsname
	% the same for other options with white spaces:
	\expandafter\let\expandafter\ifaxis@scale@only@axis\csname ifaxis@scale only axis\endcsname
	\newif\ifaxis@draw@at@end
	\newif\ifaxis@limits@are@computed
	\newif\ifaxis@EMERGENCY@FORCE@DATA@TRAFO@TO@IDENTITY
	\axis@numplots=0
	\let\axis@already@computed@legend@node=\empty
	%
	% --------------------
	% Option preprocessing
	% --------------------
	\axis@prepare@coord@filtering@for x
	\axis@prepare@coord@filtering@for y
	%
	\ifx\axis@xfilter\empty
	\else
		\axis@filtercoordstrue
	\fi
	\ifx\axis@yfilter\empty
	\else
		\axis@filtercoordstrue
	\fi
	% 
	\ifx\axis@xmin\empty
		\axis@autocompute@xlimtrue
		\def\axis@xmin{16300}%
		\ifaxis@float@numerics@mode@x
			\scisetcomponents\axis@xmin{1}{1.0}{324}%
		\fi
	\fi
	\ifx\axis@xmax\empty
		\axis@autocompute@xlimtrue
		\def\axis@xmax{-16300}%
		\ifaxis@float@numerics@mode@x
			\scisetcomponents\axis@xmax{2}{1.0}{324}%
		\fi
	\fi
	\ifx\axis@ymin\empty
		\axis@autocompute@ylimtrue
		\def\axis@ymin{16300}%
		\ifaxis@float@numerics@mode@y
			\scisetcomponents\axis@ymin{1}{1.0}{324}%
		\fi
	\fi
	\ifx\axis@ymax\empty
		\axis@autocompute@ylimtrue
		\def\axis@ymax{-16300}%
		\ifaxis@float@numerics@mode@y
			\scisetcomponents\axis@ymax{2}{1.0}{324}%
		\fi
	\fi
	%
	\ifaxis@autocompute@xlim
		\axis@draw@at@endtrue
		\axis@limits@are@computedfalse
	\else
		\axis@limits@are@computedtrue
	\fi
	\ifaxis@autocompute@ylim
		\axis@draw@at@endtrue
		\axis@limits@are@computedfalse
	\else
		\axis@limits@are@computedtrue
	\fi
	%
	%
	% --------------------
	% Start axis:
	% either postponed to \end or directly.
	% --------------------
	%
	\ifaxis@draw@at@end
	\else
		\axis@BEGIN@init@and@draw@axis
	\fi
}{%
	%\end{axis}:
	% --------------------
	%  All plotting commands
	%  have been done.
	%  -> apply postponed drawing commands!
	% --------------------
	\ifaxis@draw@at@end
		\ifaxis@limits@are@computed
		\else
			% EMPTY AXIS:
			\def\axis@xmin{0}%
			\def\axis@xmax{1}%
			\def\axis@ymin{0}%
			\def\axis@ymax{1}%
		\fi
		\axis@BEGIN@init@and@draw@axis
		\listforeach\axis@stored@plot@cmds\as\plotcmd{%
			\listpopfront\axis@stored@plot@data\to\plotdata
			\ifaxis@float@numerics@mode
				\ifx\plotcmd\empty
					\plotdata
				\else
					% Apply the data scaling transformation
					\expandafter\axis@apply@data@scaletrafo@to@plot@data\plotdata\to\plotdata
					\expandafter\plotcmd\plotdata
				\fi
			\else
				\expandafter\plotcmd\plotdata
			\fi
		}%
	\fi
	\axis@END@init@and@draw@axis
	%
	\begin{scope}[%
		xshift=+\axis@xcoordminTEX,
		yshift=\axis@ycoordminTEX,
		x={\axis@xcoordmaxTEX-\axis@xcoordminTEX},
		y={\axis@ycoordmaxTEX-\axis@ycoordminTEX}
	]%
		\axis@create@axis@descriptions
	\end{scope}%
	\end{scope}% this scope starts inside of \axis@BEGIN@init@and@draw@axis
	%
	\end{scope}%
	\endgroup
}

\newenvironment{semilogxaxis}[1][]{%
	\begin{axis}[xmode=log,ymode=normal,#1]
}{%
	\end{axis}%
}

\newenvironment{semilogyaxis}[1][]{%
	\begin{axis}[xmode=normal,ymode=log,#1]
}{%
	\end{axis}%
}

\newenvironment{loglogaxis}[1][]{%
	\begin{axis}[xmode=log,ymode=log,#1]
}{%
	\end{axis}%
}
