This is basically the same answer as marsupilam's. The (main) differences are:
- added
$\zeta=1$
line
- added
$\omega$
labels
- added axis labels
- provided an alternative, more automated way to add the
xticklabels
and yticklabels
For more details please have a look at the comments in the code.
% used PGFPlots v1.14
\documentclass[12pt,border=2pt]{standalone}
\usepackage{pgfplots}
% load the `polar' library so we can use `data cs=polar'
\usepgfplotslibrary{polar}
% use this `compat' level or higher to use the advanced axis label positioning
\pgfplotsset{compat=1.3}
\begin{document}
\begin{tikzpicture}[
% create a style for the common options of the labels
Label/.style={
font=\tiny,
inner sep=1pt,
},
]
\begin{axis}[
height=15cm,
axis equal image=true,
xmin=-1.05,
xmax=1.05,
ymin=0,
ymax=1.05,
xlabel=Real,
ylabel=Imaginary,
samples=61, % <-- reduced number of samples and added `smooth'
smooth,
xtick distance=0.25,
ytick distance=0.1,
minor tick num=4,
major grid style={thick},
grid=both,
% ---------------------------------------------------------------------
% giving every second ticklabel manually ...
% xticklabels={,-1,,-0.5,,0,,0.5,,1},
% yticklabels={,0,,0.2,,0.4,,0.6,,0.8,,1},
% ... and here an automatic way
xticklabel={%
\pgfmathsetmacro{\TickNum}{ifthenelse(mod(\ticknum,2)==0,1,0)}
\ifdim\TickNum pt=0pt % a TeX \if -- see TeX Book
$\pgfmathprintnumber{\tick}$%
\else
\fi
},
yticklabel={%
\pgfmathsetmacro{\TickNum}{ifthenelse(mod(\ticknum,2)==0,1,0)}
\ifdim\TickNum pt=0pt % a TeX \if -- see TeX Book
$\pgfmathprintnumber{\tick}$%
\else
\fi
},
% ---------------------------------------------------------------------
data cs=polar, % <-- moved common `addplot' options here
clip=false, % <-- added so the labels aren't clipped
]
% constant $\zeta$ contours
% (we cannot also calculate the $\zeta = 1$ line directly, because
% this will lead to a "division by zero" error)
% the lines will be plotted in two parts to place the labels at
% a "good" position
% (because we want to add them `sloped' it is not an option to add
% the nodes separately at the calculated positions)
\pgfplotsinvokeforeach{0,0.1,...,0.9} {
% calculate a factor in advance
\pgfmathsetmacro{\factor}{#1/sqrt(1-#1^2)}
% plot the first part of the $\zeta$ contour lines ...
\addplot [
domain=0:0.35*sqrt(1-#1^2),
] (180*x,{exp(-pi*\factor*x)})
% ... and add the labels
node [
Label,
at end,
sloped,
anchor=south,
] {$\zeta =
% because of some math inaccuracies we need to format the
% numbers when we use the `\pgfmathprintnumber'
\pgfmathprintnumber[
fixed,
fixed zerofill,
precision=1,
]{#1}$
}
;
% plot the second part of the $\zeta$ contour lines
\addplot [
domain=.35*sqrt(1-#1^2):sqrt(1-#1^2),
] (180*x,{exp(-pi*\factor*x)});
}
% now add the $\zeta = 1$ line
\addplot [
domain=exp(-pi):1,
samples=2,
data cs=cart,
] (x,0)
node [
Label,
pos=0.31, % <-- found due to testing
anchor=south,
] {$\zeta = 1$}
;
% constant $\omega$ contours
\pgfplotsinvokeforeach{0.05,0.1,0.2,...,1.0} {
\addplot [
domain=0:90,
] ({180*#1*cos(x)},{exp(-pi*#1*sin(x))})
% add the nodes again
node [
Label,
at start,
anchor=180*(#1-1),
] {%
% we don't want to plot the "1" so we need a special
% handler
% (unfortunately `\pgfmathprintnumber' seems to *need*
% to have a number and thus we cannot do something
% like
% \pgfmathparse{ifthenelse(abs(#1-1)<0.01,,#1)}%
% $\frac{\pgfmathprintnumber[fixed]{#1}\,\pi}{T}$
% )
\ifdim#1 pt>0.99pt
$\frac{\pi}{T}$
\else
$\frac{\pgfmathprintnumber[fixed]{#1}\,\pi}{T}$
\fi
}
;
}
\end{axis}
\end{tikzpicture}
\end{document}