Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes


Draws a Hall chart


sh = hallchart(modules)
sh = hallchart(modules, args)
sh = hallchart(modules, args, colors)


vector of real numbers: modules (in dB). Default values are computed according to the data bounds, whose default are [-4,3] for the Real axis and [-3 3] for the Imaginary one.

vector of real numbers: phases (in degree). Default values:

[-90 -60 -40 -30 -25 -20 -15 -12 12 15 20 25 30 40 60 90]°

vector of 1 or 2 components specifying the colors of the isogain and isophase sets of curves. To choose the color for only one grid, set the other one to "" or 0. If a single color is provided, it is used for both gains and phases. colors may be specified either
  • by indices in the color map.
  • named colors among the predefined ones.
  • "#RRGGBB" hexadecimal case-insensitive strings starting with "#", like "#FA7B35".
  • A 1x3 or 2x3 matrix of [r g b] intensities such that 0 <= r,g,b <= 1.

Structure with 4 fields:
  • .phaseLines: vector of handles of isophase lines. .phaseLines(i) is the line for args(i).
  • .phaseLabels: vector of handles of isophase labels. .phaseLabels(i) is the label for args(i).
  • .gainLines: vector of handles of isogain lines. .gainLines(i) is the line for modules(i).
  • .gainLabels: vector of handles of isogain labels. .gainLabels(i) is the label for modules(i).


plots the Hall's chart: iso-module and iso-argument contours of y/(1+y) in the real(y), imag(y) plane

hallchart may be used in conjunction with nyquist.

Datatips on isogain and isophase curves are customized.


Charts in an empty default or empty preset axes: Note that default Hall chart titles are then set:

// In a default axes

// In a preset empty axes
plotframe([-4 -2 1 4]) // xmin ymin ymax ymax

Customizing some elements of the grids and labels:

h = hallchart();

// 5dB isogain
i = find(h.gainLabels.text=="5dB");
    // Customizing the label
    // Customizing the line
h.gainLines(i).thickness = 3;

// +/-25° isophases
i = grep(h.phaseLabels.text,"25°")
    // Customizing the labels
    // Customizing the lines
set(h.phaseLines(i), "thickness",2,"line_style",1);

Background of a Nyquist diagram

Note that pre-existing titles are kept.

s = %s;
Plant = syslin('c', 16000/((s+1)*(s+10)*(s+100)));
//two degree of freedom PID
[tau, xsi] = (0.2, 1.2);
PID = syslin('c',(1/(2*xsi*tau*s))*(1+2*xsi*tau*s+tau^2*s^2));

nyquist([Plant;Plant*PID], 0.5, 100, ["Plant";"Plant and PID corrector"]);
mod = [12 6 3 2 1 0.5 0.2 0.1 -6 -3 -2 -1 -0.5 -0.2 -0.1];
hallchart(mod,, ["goldenrod1" ""]);
// Move the caption to avoid hiding data
Leg = gca().children(1);
set(Leg,"legend_location","by_coordinates","position",[0.15 0.4]);

See also


  • The default values for the modules are computed according to the data bounds.
  • The frames colors can be specified by their Scilab name or their "#RRGGBB" hexadecimal code. "" or 0 can be used as partial default.
  • Output argument sh added.
Report an issue
<< gainplot Frequency Domain nicholschart >>

Copyright (c) 2022-2023 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Nov 07 15:05:57 CET 2022