---
title: "NicholsPlot"
language: "en"
type: "Symbol"
summary: "NicholsPlot[lsys] generates a Nichols plot of the transfer function for the system lsys. NicholsPlot[lsys, {\\[Omega]min, \\[Omega]max}] plots for the frequency range \\[Omega]min to \\[Omega]max. NicholsPlot[expr, {\\[Omega], \\[Omega]min, \\[Omega]max}] plots expr using the variable \\[Omega]."
keywords: 
- Nichols plot
- frequency response characteristics
- magnitude phase plot
- sinusoidal transfer function
- phase margin
- gain margin
- bandwidth
- gain crossover frequency
- phase crossover frequency
- Nichols grid lines
- Nichols chart
- M-contours
- constant magnitude contours
- N-contours
- constant phase contours
- classical control
- control systems
- control theory
- nichols
- ngrid
canonical_url: "https://reference.wolfram.com/language/ref/NicholsPlot.html"
source: "Wolfram Language Documentation"
related_guides: 
  - 
    title: "Classical Analysis and Design"
    link: "https://reference.wolfram.com/language/guide/ClassicalAnalysisAndDesign.en.md"
  - 
    title: "Fourier Analysis"
    link: "https://reference.wolfram.com/language/guide/FourierAnalysis.en.md"
  - 
    title: "Integral Transforms"
    link: "https://reference.wolfram.com/language/guide/IntegralTransforms.en.md"
related_functions: 
  - 
    title: "NicholsGridLines"
    link: "https://reference.wolfram.com/language/ref/NicholsGridLines.en.md"
  - 
    title: "NyquistPlot"
    link: "https://reference.wolfram.com/language/ref/NyquistPlot.en.md"
  - 
    title: "BodePlot"
    link: "https://reference.wolfram.com/language/ref/BodePlot.en.md"
  - 
    title: "GainPhaseMargins"
    link: "https://reference.wolfram.com/language/ref/GainPhaseMargins.en.md"
  - 
    title: "TransferFunctionModel"
    link: "https://reference.wolfram.com/language/ref/TransferFunctionModel.en.md"
---
# NicholsPlot

NicholsPlot[lsys] generates a Nichols plot of the transfer function for the system lsys.

NicholsPlot[lsys, {ωmin, ωmax}] plots for the frequency range ωmin to ωmax.

NicholsPlot[expr, {ω, ωmin, ωmax}] plots expr using the variable ω.

## Details and Options

* ``NicholsPlot`` gives the magnitude versus phase plot of the transfer function of ``lsys``.

* The system ``lsys`` can be ``TransferFunctionModel`` or ``StateSpaceModel``, including descriptor and delay systems.

* For a system ``lsys`` with the corresponding transfer function $g(s)$, the following expressions are plotted:

|                                                           |                                                                            |
| --------------------------------------------------------- | -------------------------------------------------------------------------- |
| $g(i \omega )$              | continuous-time system                                                     |
| $g(\exp (i \tau  \omega ))$ | discrete-time system with sample time $\tau$ |

* ``NicholsPlot`` treats the variable ``ω`` as local, effectively using ``Block``.

* ``NicholsPlot`` has the same options as ``Graphics``, with the following changes and additions: []

|                        |                   |                                                                   |
| ---------------------- | ----------------- | ----------------------------------------------------------------- |
| Axes                   | True              | whether to draw axes                                              |
| ColorFunction          | Automatic         | how to apply coloring to the curve                                |
| ColorFunctionScaling   | True              | whether to scale arguments to ColorFunction                       |
| EvaluationMonitor      | None              | expression to evaluate at every evaluation                        |
| Exclusions             | Automatic         | frequencies to exclude                                            |
| ExclusionsStyle        | None              | what to draw at excluded frequencies                              |
| FeedbackType           | "Negative"        | the feedback type                                                 |
| MaxRecursion           | Automatic         | the maximum number of recursive subdivisions allowed              |
| Mesh                   | Automatic         | how many mesh divisions to draw                                   |
| MeshFunctions          | {#3&}             | how to determine the placement of mesh divisions                  |
| MeshShading            | None              | how to shade regions between mesh points                          |
| MeshStyle              | Automatic         | the style for mesh divisions                                      |
| NicholsGridLines       | None              | the Nichols grid lines to draw                                    |
| PerformanceGoal        | \$PerformanceGoal | aspects of performance to try to optimize                         |
| PlotLegends            | None              | legends for curves                                                |
| PhaseRange             | Automatic         | range of phase values to use                                      |
| PlotPoints             | Automatic         | iniitial number of sample frequencies                             |
| PlotRange              | Automatic         | range of magnitude and phase values to include                    |
| PlotRangeClipping      | True              | whether to clip at the PlotRange                                  |
| PlotStyle              | Automatic         | graphics directives to specify the style of the plot              |
| PlotTheme              | \$PlotTheme       | overall theme for the plot                                        |
| RegionFunction         | Automatic         | how to determine whether a point should be included               |
| SamplingPeriod         | None              | the sampling period                                               |
| ScalingFunctions       | {"Degree", "dB"}  | the scaling functions                                             |
| StabilityMargins       | False             | whether to show the stability margins                             |
| StabilityMarginsStyle  | Automatic         | graphics directives to specify the style of the stability margins |
| WorkingPrecision       | MachinePrecision  | the precision used in internal computations                       |

* ``ColorData["DefaultPlotColors"]`` gives the default sequence of colors used by ``PlotStyle``.

* ``ScalingFunctions -> {phasescale, magscale}`` can be used to specify the scaling functions.

* The phase scale ``phasescale`` can be ``"Degree"`` or ``"Radian"``.

* The magnitude scale ``magscale`` can be ``"dB"`` or ``"Absolute"``, which correspond to the decibel and absolute values of the magnitude, respectively.

### List of all options

|                        |                   |                                                                                    |
| ---------------------- | ----------------- | ---------------------------------------------------------------------------------- |
| AlignmentPoint         | Center            | the default point in the graphic to align with                                     |
| AspectRatio            | Automatic         | ratio of height to width                                                           |
| Axes                   | True              | whether to draw axes                                                               |
| AxesLabel              | None              | axes labels                                                                        |
| AxesOrigin             | Automatic         | where axes should cross                                                            |
| AxesStyle              | {}                | style specifications for the axes                                                  |
| Background             | None              | background color for the plot                                                      |
| BaselinePosition       | Automatic         | how to align with a surrounding text baseline                                      |
| BaseStyle              | {}                | base style specifications for the graphic                                          |
| ColorFunction          | Automatic         | how to apply coloring to the curve                                                 |
| ColorFunctionScaling   | True              | whether to scale arguments to ColorFunction                                        |
| ContentSelectable      | Automatic         | whether to allow contents to be selected                                           |
| CoordinatesToolOptions | Automatic         | detailed behavior of the coordinates tool                                          |
| Epilog                 | {}                | primitives rendered after the main plot                                            |
| EvaluationMonitor      | None              | expression to evaluate at every evaluation                                         |
| Exclusions             | Automatic         | frequencies to exclude                                                             |
| ExclusionsStyle        | None              | what to draw at excluded frequencies                                               |
| FeedbackType           | "Negative"        | the feedback type                                                                  |
| FormatType             | TraditionalForm   | the default format type for text                                                   |
| Frame                  | False             | whether to put a frame around the plot                                             |
| FrameLabel             | None              | frame labels                                                                       |
| FrameStyle             | {}                | style specifications for the frame                                                 |
| FrameTicks             | Automatic         | frame ticks                                                                        |
| FrameTicksStyle        | {}                | style specifications for frame ticks                                               |
| GridLines              | None              | grid lines to draw                                                                 |
| GridLinesStyle         | {}                | style specifications for grid lines                                                |
| ImageMargins           | 0.                | the margins to leave around the graphic                                            |
| ImagePadding           | All               | what extra padding to allow for labels etc.                                        |
| ImageSize              | Automatic         | the absolute size at which to render the graphic                                   |
| LabelStyle             | {}                | style specifications for labels                                                    |
| MaxRecursion           | Automatic         | the maximum number of recursive subdivisions allowed                               |
| Mesh                   | Automatic         | how many mesh divisions to draw                                                    |
| MeshFunctions          | {#3&}             | how to determine the placement of mesh divisions                                   |
| MeshShading            | None              | how to shade regions between mesh points                                           |
| MeshStyle              | Automatic         | the style for mesh divisions                                                       |
| Method                 | Automatic         | details of graphics methods to use                                                 |
| NicholsGridLines       | None              | the Nichols grid lines to draw                                                     |
| PerformanceGoal        | \$PerformanceGoal | aspects of performance to try to optimize                                          |
| PhaseRange             | Automatic         | range of phase values to use                                                       |
| PlotLabel              | None              | an overall label for the plot                                                      |
| PlotLegends            | None              | legends for curves                                                                 |
| PlotPoints             | Automatic         | iniitial number of sample frequencies                                              |
| PlotRange              | Automatic         | range of magnitude and phase values to include                                     |
| PlotRangeClipping      | True              | whether to clip at the PlotRange                                                   |
| PlotRangePadding       | Automatic         | how much to pad the range of values                                                |
| PlotRegion             | Automatic         | the final display region to be filled                                              |
| PlotStyle              | Automatic         | graphics directives to specify the style of the plot                               |
| PlotTheme              | \$PlotTheme       | overall theme for the plot                                                         |
| PreserveImageOptions   | Automatic         | whether to preserve image options when displaying new versions of the same graphic |
| Prolog                 | {}                | primitives rendered before the main plot                                           |
| RegionFunction         | Automatic         | how to determine whether a point should be included                                |
| RotateLabel            | True              | whether to rotate y labels on the frame                                            |
| SamplingPeriod         | None              | the sampling period                                                                |
| ScalingFunctions       | {"Degree", "dB"}  | the scaling functions                                                              |
| StabilityMargins       | False             | whether to show the stability margins                                              |
| StabilityMarginsStyle  | Automatic         | graphics directives to specify the style of the stability margins                  |
| Ticks                  | Automatic         | axes ticks                                                                         |
| TicksStyle             | {}                | style specifications for axes ticks                                                |
| WorkingPrecision       | MachinePrecision  | the precision used in internal computations                                        |

---

## Examples (69)

### Basic Examples (4)

Nichols plot of a transfer-function model:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{10*(0.5 + s)*(1 + 10*s)}}, 
  s*(2 + s)}, s]]

Out[1]= [image]
```

---

Specify the frequency range:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}]

Out[1]= [image]
```

---

Nichols plot of a discrete-time system:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{2}}, 0.3125 - z + z^2}, z, 
 SamplingPeriod -> 1]]

Out[1]= [image]
```

---

Use legends for multiple systems:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{1 + s, 1 + s}}, 
  {{1 + 2*s + s^2, 1 - 2*s + s^2}}}, 
 s], PlotLegends -> "Expressions"]

Out[1]= [image]
```

### Scope (8)

The Nichols plot of a continuous-time system:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{15}}, s*(1 + s + s^2)}, 
 s]]

Out[1]= [image]
```

---

The Nichols plot of a discrete-time system:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{Rational[1, 2]*(0.5 + z)*(1 + z)}}, 
  (-1 + z)*(-0.5 + z)}, z, SamplingPeriod -> 2]]

Out[1]= [image]
```

---

The system can also be specified as an expression:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{2*(0.25 + s)}}, 
  s^2*(3 + 3*s + s^2)}, s]]

Out[1]= [image]
```

---

A discrete-time system with sampling period 1, specified as an expression:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4*(-0.5 + z)*(-0.3 + z)}}, 
  (-0.8 + z)*(0.5 + z)}, z, SamplingPeriod -> 1]]

Out[1]= [image]
```

---

A system with a time delay:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{1.}}, 0.8/E^(5.*s) + s}, s]]

Out[1]= [image]
```

---

Specify the frequency range:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{1}}, -0.1 + 0.5*z - 0.8*z^2 - 
   0.6*z^3 + z^4}, z, SamplingPeriod -> 1], {0.5, π}]

Out[1]= [image]
```

---

The Nichols plot of a state-space model:

```wl
In[1]:=
NicholsPlot[StateSpaceModel[{{{-90.5, -162.5}, {45.5, 81.5}}, {{4}, {-2}}, {{1.5, 2.5}}, {{0}}}, 
 SamplingPeriod -> None, SystemsModelLabels -> None]]

Out[1]= [image]
```

---

A system specified as a sinusoidal transfer function:

```wl
In[1]:= NicholsPlot[(1/E^I ω  + 0.8), ω, SamplingPeriod -> 1]

Out[1]= [image]
```

### Generalizations & Extensions (1)

``NicholsPlot[TransferFunctionModel[g, var]]`` is equivalent to ``NicholsPlot[g]`` :

```wl
In[1]:= g = (4(s + 0.5)/s^2(s^2 + 2 s + 4));

In[2]:= {NicholsPlot[g], NicholsPlot[TransferFunctionModel[g, s]]}

Out[2]= {[image], [image]}
```

### Options (56)

#### AspectRatio (1)

Specify the aspect ratio:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AspectRatio -> (1/2)]

Out[1]= [image]
```

#### Axes (3)

By default, axes are drawn:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s]]

Out[1]= [image]
```

---

Use ``Axes -> False`` to turn off axes:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], Axes -> False]

Out[1]= [image]
```

---

Turn each axis on individually:

```wl
In[1]:=
{NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], Axes -> {True, False}], NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], Axes -> {False, True}]}

Out[1]= {[image], [image]}
```

#### AxesLabel (4)

No axes labels are drawn by default:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s]]

Out[1]= [image]
```

---

Place a label on the $y$ axis:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AxesLabel -> label]

Out[1]= [image]
```

---

Specify axes labels:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{3*s}}, 2 + 5*s + s^2}, 
 s], AxesLabel -> {"Phase angle (deg)", "Magnitude (dB)"}]

Out[1]= [image]
```

---

Use labels based on variables specified in ``NicholsPlot`` :

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AxesLabel -> Automatic]

Out[1]= [image]
```

#### AxesOrigin (2)

The position of the axes is determined automatically:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s]]

Out[1]= [image]
```

---

Specify an explicit origin for the axes:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AxesOrigin -> {100, 0}]

Out[1]= [image]
```

#### AxesStyle (4)

Change the style for the axes:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AxesStyle -> Red]

Out[1]= [image]
```

---

Specify the style of each axis:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AxesStyle -> {{Thick, Red}, {Thick, Blue}}]

Out[1]= [image]
```

---

Use different styles for the ticks and the axes:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AxesStyle -> Green, TicksStyle -> Black]

Out[1]= [image]
```

---

Use different styles for the labels and the axes:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AxesStyle -> Green, LabelStyle -> Black]

Out[1]= [image]
```

#### ColorFunction (3)

Color the curve by scaled frequency values:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{10}}, s*(2 + s)*(4 + s)}, 
 s], ColorFunction -> Function[{x, y, f}, Hue[f]]]

Out[1]= [image]
```

---

Use a named color gradient:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{10 + s}}, (1 + s)*(20 + s)*
   (40 + s)}, s], ColorFunction -> "SolarColors"]

Out[1]= [image]
```

---

Use red when the sensitivity function is less than 1, and black otherwise:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{1}}, (1 + s)*(2 + s)}, s], ColorFunction -> Function[{x, y, f}, With[{mag = 10^(y/20), phase = x Degree}, If[Abs[(1/1 + mag Exp[I phase])] < 1, Red, Black]]], ColorFunctionScaling -> False ]

Out[1]= [image]
```

#### ColorFunctionScaling (1)

Scale the frequency to be between 0 and 1:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[
 {{{2*(1 + 0.001*s)*(0.05 + s)*(0.5 + s)}}, 
  s*(2.1 + s)*(4.2 + s)}, s], {0.05, 10}, ColorFunction -> Function[{x, y, f}, Hue[f]], ColorFunctionScaling -> True]

Out[1]= [image]
```

``ColorFunctionScaling -> False`` uses absolute values:

```wl
In[2]:=
NicholsPlot[TransferFunctionModel[
 {{{2*(1 + 0.001*s)*(0.05 + s)*(0.5 + s)}}, 
  s*(2.1 + s)*(4.2 + s)}, s], {0.05, 10}, ColorFunction -> Function[{x, y, f}, Hue[f]], ColorFunctionScaling -> False]

Out[2]= [image]
```

Specify the scaling manually:

```wl
In[3]:=
NicholsPlot[TransferFunctionModel[
 {{{2*(1 + 0.001*s)*(0.05 + s)*(0.5 + s)}}, 
  s*(2.1 + s)*(4.2 + s)}, s], {0.1, 10}, ColorFunction -> Function[{x, y, f}, Hue[(f/10)]], ColorFunctionScaling -> False]

Out[3]= [image]
```

#### CoordinatesToolOptions (1)

Display the tooltip coordinates in radians and absolute magnitude:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{2 + s}}, 4 + 2*s + s^2}, 
 s], CoordinatesToolOptions -> {"DisplayFunction" -> Function[pt, {pt[[1]] Degree, 10^(pt[[2]]/20)}]}]

Out[1]= [image]
```

#### Exclusions (1)

By default the singular frequencies are excluded:

```wl
In[1]:= Table[NicholsPlot[TransferFunctionModel[{{{10}}, (3 + s)*(16 + s^2)}, s], {0.1, 6}, Exclusions -> excl], {excl, {Automatic, None}}]

Out[1]= {[image], [image]}
```

#### ImageSize (7)

Use named sizes such as ``Tiny``, ``Small``, ``Medium`` and ``Large`` :

```wl
In[1]:=
{NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], ImageSize -> Tiny], NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], ImageSize -> Small]}

Out[1]= {[image], [image]}
```

---

Specify the width of the plot:

```wl
In[1]:=
{NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], ImageSize -> 150], NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AspectRatio -> 1.5, ImageSize -> 150]}

Out[1]= {[image], [image]}
```

Specify the height of the plot:

```wl
In[2]:=
{NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], ImageSize -> {Automatic, 150}], NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AspectRatio -> 2, ImageSize -> {Automatic, 150}]}

Out[2]= {[image], [image]}
```

---

Allow the width and height to be up to a certain size:

```wl
In[1]:=
{NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], ImageSize -> UpTo[200]], NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AspectRatio -> 2, ImageSize -> UpTo[200]]}

Out[1]= {[image], [image]}
```

---

Specify the width and height for a graphic, padding with space if necessary:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], ImageSize -> {200, 300}, Background -> LightBlue]

Out[1]= [image]
```

Setting ``AspectRatio -> Full`` will fill the available space:

```wl
In[2]:=
NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AspectRatio -> Full, ImageSize -> {200, 300}, Background -> LightBlue]

Out[2]= [image]
```

---

Use maximum sizes for the width and height:

```wl
In[1]:=
{NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], ImageSize -> {UpTo[150], UpTo[100]}], NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AspectRatio -> 2, ImageSize -> {UpTo[150], UpTo[100]}]}

Out[1]= {[image], [image]}
```

---

Use ``ImageSize -> Full`` to fill the available space in an object:

```wl
In[1]:=
Framed[Pane[NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], ImageSize -> Full, Background -> LightBlue], {200, 100}]]

Out[1]= [image]
```

---

Specify the image size as a fraction of the available space:

```wl
In[1]:=
Framed[Pane[NicholsPlot[TransferFunctionModel[{{{s^2}}, 4 + 2*s + s^2}, 
 s], AspectRatio -> Full, ImageSize -> {Scaled[0.5], Scaled[0.5]}, Background -> LightBlue], {200, 100}]]

Out[1]= [image]
```

#### Mesh (4)

Show equally spaced frequency locations:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{1 + s}}, (2 + s)*
   (1 + s + s^2)}, s], Mesh -> 5]

Out[1]= [image]
```

---

Show the coordinates at 1 radian per time unit:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{0.09*(0.005 + s)*(1 + 10*s)}}, 
  s^3*(2 + s)}, s], {0.05, 20}, Mesh -> {{1}}]

Out[1]= [image]
```

---

Show the coordinates at several frequencies:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{0.09*(0.005 + s)*(1 + 10*s)}}, 
  s^3*(2 + s)}, s], {0.05, 20}, Mesh -> {{1, 2, 4, 8}}]

Out[1]= [image]
```

---

Specify the graphics directives:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{0.09*(0.005 + s)*(1 + 10*s)}}, 
  s^3*(2 + s)}, s], {0.05, 20}, Mesh -> {Table[{2^i, Directive[{PointSize[Medium], Hue[(i/10)]}]}, {i, 0, 3}]}]

Out[1]= [image]
```

#### MeshFunctions (1)

By default the mesh is located at evenly spaced frequencies:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{10*s}}, 3 + s + 2*s^2 + 
   s^3}, s], Mesh -> 5, MeshStyle -> Red]

Out[1]= [image]
```

Specify a mesh with evenly spaced log-10 frequency values:

```wl
In[2]:=
NicholsPlot[TransferFunctionModel[{{{10*s}}, 3 + s + 2*s^2 + 
   s^3}, s], Mesh -> 5, MeshStyle -> Red, MeshFunctions -> Function[{x, y, f}, Log10[f]]]

Out[2]= [image]
```

#### MeshStyle (1)

Specify the mesh style:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{(0.09*(0.005 + s))*(1 + 10*s)}}, s^3*(2 + s)}, s], {0.05, 20}, Mesh -> {{1, 2, 4, 8}}, MeshStyle -> Red]

Out[1]= [image]
```

#### NicholsGridLines (2)

Use automatically chosen values of closed-loop magnitude and phase:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{s}}, 4 + s}, s], NicholsGridLines -> Automatic]

Out[1]= [image]
```

---

Draw specific contours:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{s}}, 4 + s}, s], NicholsGridLines -> {Range[0.02, 0.5, 0.02], Range[10 Degree, 80 Degree, 10 Degree]}]

Out[1]= [image]
```

#### PhaseRange (1)

The phase is typically plotted as a continuous function:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{1}}, (1 + s)^12}, s]]

Out[1]= [image]
```

Specify a phase range:

```wl
In[2]:= NicholsPlot[TransferFunctionModel[{{{1}}, (1 + s)^12}, s], PhaseRange -> {-2 π, 0}]

Out[2]= [image]
```

#### PlotLegends (4)

Use automatic legends for multiple systems:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{s, -1 + s}}, 4 + s}, s], PlotLegends -> Automatic]

Out[1]= [image]
```

---

Use named legends:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{s, -1 + s}}, 
  {{-1 + s, s}}}, s], PlotLegends -> "Expressions"]

Out[1]= [image]
```

---

Use ``LineLegend`` to add the label for overall legend:

```wl
In[1]:=
NicholsPlot[Table[TransferFunctionModel[{{{(1 + s)*ω}}, 
  1 + 2*s + s^2}, s], {ω, 0.2, 0.5, 0.1}], PlotLegends -> LineLegend[Range[0.2, 0.5, 0.1], LegendLabel -> "ω"]]

Out[1]= [image]
```

---

Place the legend above the plot:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{s, -1 + s}}, 4 + s}, s], PlotLegends -> Placed["Expressions", Above]]

Out[1]= [image]
```

#### PlotPoints (1)

Use more initial points to get a smoother curve:

```wl
In[1]:=
Table[NicholsPlot[TransferFunctionModel[{{{0.01283 - 0.0094*z - 0.6326*z^2}}, 
  0.000335 - 0.05686*z + 1.05652*z^2 - z^3}, z, 
 SamplingPeriod -> 1], PlotPoints -> pp], {pp, {500, 7000}}]

Out[1]= {[image], [image]}
```

#### PlotTheme (2)

Use a theme with a frame and grid lines:

```wl
In[1]:= NicholsPlot[TransferFunctionModel[{{{s, -1 + s}}, 4 + s}, s], PlotTheme -> "Detailed"]

Out[1]= [image]
```

---

Change the style of the grid lines:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{s, -1 + s}}, 4 + s}, s], PlotTheme -> "Detailed", GridLinesStyle -> LightGray]

Out[1]= [image]
```

#### ScalingFunctions (1)

Show the phase in radians:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{1 + s}}, 
  s*(1 + s + 0.25*s^2)}, s], ScalingFunctions -> {"Radian", Automatic}]

Out[1]= [image]
```

Show absolute values of magnitude:

```wl
In[2]:= NicholsPlot[TransferFunctionModel[{{{1}}, 1 + s}, s], ScalingFunctions -> {Automatic, "Absolute"}]

Out[2]= [image]
```

#### StabilityMargins (3)

Show stability margins:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{1}}, 1 + 2*s + 4*s^2 + 2*s^3}, 
 s], StabilityMargins -> True]

Out[1]= [image]
```

---

Show only the gain margin:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{1}}, 1 + 2*s + 4*s^2 + 2*s^3}, 
 s], StabilityMargins -> {True, False}]

Out[1]= [image]
```

---

Only margins and crossover frequencies with numerical values are shown:

```wl
In[1]:=
lsys = TransferFunctionModel[{{{4*(1 + s)}}, 
  s*(4 + 4*s + s^2)}, s];

In[2]:= NicholsPlot[lsys, StabilityMargins -> True]

Out[2]= [image]

In[3]:= GainPhaseMargins[lsys//N]

Out[3]= {{{None, ∞}}, {{1.14494, 1.3838}}}
```

#### StabilityMarginsStyle (1)

Specify stability margins style:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{6}}, 3*(1 + Rational[1, 3]*s)*s*
   (1 + s)}, s], StabilityMargins -> True, StabilityMarginsStyle -> {Red, Black}]

Out[1]= [image]
```

#### Ticks (4)

Ticks are placed automatically in each plot:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}]

Out[1]= [image]
```

---

Use ``Ticks -> None`` to not draw any tick marks:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}, Ticks -> None]

Out[1]= [image]
```

---

Place tick marks at specific positions:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}, Ticks -> {{-90, -60, -30}, {10, 0, -17}}]

Out[1]= [image]
```

---

Draw tick marks at the specified positions with the specified labels:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}, Ticks -> {{{-90, a}, {-60, b}, {-30, c}}, {{10, d}, {0, e}, {-17, f}}}]

Out[1]= [image]
```

#### TicksStyle (4)

Specify overall ticks style, including the tick labels:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}, TicksStyle -> Directive[Bold, Red]]

Out[1]= [image]
```

---

Specify tick style for each of the axes:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}, TicksStyle -> {Directive[Black, Bold], Directive[Bold, Red]}]

Out[1]= [image]
```

---

Specify tick marks with scaled lengths:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}, Ticks -> {{{-90, a, .5}, {-60, b, .83}, {-30, c, .95}}, {{10, d, .8}, {0, e, .2}, {-17, f}}}]

Out[1]= [image]
```

---

Customize each tick with position, length, labeling and styling:

```wl
In[1]:=
NicholsPlot[TransferFunctionModel[{{{4 + s}}, 1 + 3*s + s^2}, 
 s], {0.2, 10}, Ticks -> {{{-90, a, .5, Directive[Red, Thick]}, {-60, b, .83, Directive[Red]}, {-30, c, .95, Directive[Darker@Red, Thick, Dashed]}}, {{10, d, .8, Directive[Blue]}, {0, e, .2, Directive[Blue]}, {-17, f, Automatic, Directive[Thick, Blue]}}}]

Out[1]= [image]
```

## See Also

* [`NicholsGridLines`](https://reference.wolfram.com/language/ref/NicholsGridLines.en.md)
* [`NyquistPlot`](https://reference.wolfram.com/language/ref/NyquistPlot.en.md)
* [`BodePlot`](https://reference.wolfram.com/language/ref/BodePlot.en.md)
* [`GainPhaseMargins`](https://reference.wolfram.com/language/ref/GainPhaseMargins.en.md)
* [`TransferFunctionModel`](https://reference.wolfram.com/language/ref/TransferFunctionModel.en.md)

## Related Guides

* [Classical Analysis and Design](https://reference.wolfram.com/language/guide/ClassicalAnalysisAndDesign.en.md)
* [Fourier Analysis](https://reference.wolfram.com/language/guide/FourierAnalysis.en.md)
* [Integral Transforms](https://reference.wolfram.com/language/guide/IntegralTransforms.en.md)

## History

* [Introduced in 2010 (8.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn80.en.md) \| [Updated in 2012 (9.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn90.en.md) ▪ [2014 (10.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn100.en.md)