Radar Plot

Let us start generating some data:

import numpy as np


ideal_point = np.array([0.15, 0.1, 0.2, 0.1, 0.1])
nadir_point = np.array([0.85, 0.9, 0.95, 0.9, 0.85])

F = np.random.random((1, 5)) * (nadir_point - ideal_point) + ideal_point
[[0.53555853 0.66651826 0.41817855 0.50866208 0.76971022]]

If the values should not be normalized, then we can plot the ideal and nadir point. This keeps the absolute values of each objective. The outer shape represents the nadir point, the inner area the ideal point. All points will lie in the area spanned by those two points additionally.

from pymoo.visualization.radar import Radar

plot = Radar(bounds=[ideal_point, nadir_point], normalize_each_objective=False)
<pymoo.visualization.radar.Radar at 0x7fdbd0a3e370>

But if the scale of the objective is too different, then normalization is recommended. Then, the ideal point is just the point in the middle, and the nadir point is now symmetric.

plot = Radar(bounds=[ideal_point, nadir_point])
<pymoo.visualization.radar.Radar at 0x7fdbc0844370>
F = np.random.random((6, 5)) * (nadir_point - ideal_point) + ideal_point

plot = Radar(bounds=[ideal_point, nadir_point],
             axis_style={"color": 'blue'},
             point_style={"color": 'red', 's': 30})
plot.add(F[:3], color="red", alpha=0.8)
plot.add(F[3:], color="green", alpha=0.8)
<pymoo.visualization.radar.Radar at 0x7fdbc07c8f10>


class pymoo.visualization.radar.Radar(self, normalize_each_objective=True, n_partitions=3, point_style={}, **kwargs)

Radar Plot


Whether each objective is normalized. Otherwise the inner and outer bound is plotted.


The style being used to visualize the points


Number of partitions to show in the radar.


If plot requires normalization, then the reverse values can be plotted (1 - Input). For some plots it can be useful to interpret a larger area as better regarding a value. If minimization applies, a smaller area means better, which can be misleading.


Most of the plots consists of an axis. The style of the axis, e.g. color, alpha, …, can be changed to further modify the plot appealing.

labelsstr or list

The labels to be used for each variable provided in the plot. If a string is used, then they will be enumerated. Otherwise, a list equal to the number of variables can be provided directly.

Other Parameters

The figure size. Default (figsize=(8, 6)). For some plots changing the size might have side-effects for position.

titlestr or tuple

The title of the figure. If some additional kwargs should be provided this can be achieved by providing a tuple (“name”, {“key” : val}).


Whether a legend should be shown or not.


Whether tight layout should be used.


For some plots different kind of colors are used. The colormap can be changed to modify the color sequence for the plots.