Source code for pymoo.visualization.radviz

"""Radviz plot visualization for multi-objective optimization results."""

from pymoo.docs import parse_doc_string
from pymoo.core.plot import Plot
from pymoo.util.misc import set_if_none_from_tuples
from pymoo.visualization.util import (
    plot_circle,
    plot_radar_line,
    plot_axis_labels,
    equal_axis,
    no_ticks,
    get_uniform_points_around_circle,
)


[docs] class Radviz(Plot): """Radviz plot visualization. Args: axis_style: {axis_style} endpoint_style: Endpoints are drawn at each extreme point of an objective. This style can be modified. labels: {labels} figsize: {figsize} title: {title} legend: {legend} tight_layout: {tight_layout} cmap: {cmap} """ def __init__(self, endpoint_style: dict | None = None, **kwargs) -> None: super().__init__(**kwargs) # set the default axis style set_if_none_from_tuples( self.axis_style, ("color", "black"), ("linewidth", 1), ("alpha", 0.75) ) if endpoint_style is None: endpoint_style = {} self.endpoint_style = endpoint_style set_if_none_from_tuples( self.endpoint_style, ("color", "black"), ("s", 70), ("alpha", 0.3) ) def _do(self) -> None: # initial a figure with a single plot self.init_figure() # equal axis length and no ticks equal_axis(self.ax) no_ticks(self.ax) V = get_uniform_points_around_circle(self.n_dim) plot_axis_labels(self.ax, V, self.get_labels(), **self.axis_label_style) # draw the outer circle and radar lines plot_circle(self.ax, **self.axis_style) plot_radar_line(self.ax, V, **self.axis_style) # draw the endpoints of each objective if self.endpoint_style: self.ax.scatter(V[:, 0], V[:, 1], **self.endpoint_style) # plot all the points for k, (F, kwargs) in enumerate(self.to_plot): N = (F[..., None] * V).sum(axis=1) / F.sum(axis=1)[:, None] self.ax.scatter(N[:, 0], N[:, 1], **kwargs)
parse_doc_string(Radviz.__init__)