You could use the approach from pgfplots: Placing node on a specific x-position to place a coordinate at a desired x-coordinate along the plot without having to determine the y-coordinate manually (example adapted from Tom's answer):

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows, intersections}
\makeatletter
\def\parsenode[#1]#2\pgf@nil{%
\tikzset{label node/.style={#1}}
\def\nodetext{#2}
}
\tikzset{
add node at x/.style 2 args={
name path global=plot line,
/pgfplots/execute at end plot visualization/.append={
\begingroup
\@ifnextchar[{\parsenode}{\parsenode[]}#2\pgf@nil
\path [name path global = position line #1-1]
({axis cs:#1,0}|-{rel axis cs:0,0}) --
({axis cs:#1,0}|-{rel axis cs:0,1});
\path [xshift=1pt, name path global = position line #1-2]
({axis cs:#1,0}|-{rel axis cs:0,0}) --
({axis cs:#1,0}|-{rel axis cs:0,1});
\path [
name intersections={
of={plot line and position line #1-1},
name=left intersection
},
name intersections={
of={plot line and position line #1-2},
name=right intersection
},
label node/.append style={pos=1}
] (left intersection-1) -- (right intersection-1)
node [label node]{\nodetext};
\endgroup
}
},
add node at y/.style 2 args={
name path global=plot line,
/pgfplots/execute at end plot visualization/.append={
\begingroup
\@ifnextchar[{\parsenode}{\parsenode[]}#2\pgf@nil
\path [name path global = position line #1-1]
({axis cs:0,#1}-|{rel axis cs:0,0}) --
({axis cs:0,#1}-|{rel axis cs:1,1});
\path [yshift=1pt, name path global = position line #1-2]
({axis cs:0,#1}-|{rel axis cs:0,0}) --
({axis cs:0,#1}-|{rel axis cs:1,1});
\path [
name intersections={
of={plot line and position line #1-1},
name=left intersection
},
name intersections={
of={plot line and position line #1-2},
name=right intersection
},
label node/.append style={pos=1}
] (left intersection-1) -- (right intersection-1)
node [label node] {\nodetext};
\endgroup
}
}
}
\begin{document}
\begin{tikzpicture}[scale=0.5]
\begin{axis}
[ ymin=5,
ymax=25,
enlargelimits=false,
title=Large Signal S-parameters of Pre-Amplifier,
ylabel=S-parameters(dB),
xlabel=Frequency(GHz),
legend style={legend pos= south east},
ytick={5,10,...,25},
grid=major,
]
\addplot +[smooth, mark=none, line width=1.5pt,
add node at x={3}{[coordinate, name=freq3]}] coordinates {(1,10)(2,8)(3,11)(4,13)(5,9)};
\addlegendentry{$S_{21}$}
\addplot +[smooth, mark=none, line width=1.5pt] coordinates {(1,17)(2,20)(3,19)(4,21)(5,18)};
\addlegendentry{$S_{11}$}
\draw [stealth-, thick] (freq3) -- ++(0,6ex) node [above] {Label};
\end{axis}
\end{tikzpicture}
\end{document}
\documentclass{...}and ending with\end{document}. – Qrrbrbirlbel Apr 29 '13 at 20:19!in front of it to turn it into a link. A moderator or another user with edit privileges can then reinsert the!to turn it into an image again. — More importantly, a sample of your data files would be helpful or at least a dummy plot or the right min and max settings, so that we can have the right limits. By the way, inside theaxisenvironment, you can use theaxis csand theaxis direction csto use the coordinate of the plot. There is alsoextra x tick/extra x label(or similar). – Qrrbrbirlbel Apr 29 '13 at 21:37