Source code for pyifdm.graphs.ifs_radar_plot

# Copyright (c) 2023 Jakub Więckowski

import matplotlib.pyplot as plt
import numpy as np

[docs] def ifs_radar_plot(ifses, labels=None, title=None, ax=None): """ Create a Spider/Radar Plot for Intuitionistic Fuzzy Sets (IFS). Parameters: - ifses (list): A list of IFS, where each IFS is a list of three values (membership, non-membership, uncertainty). - labels (list, optional): Labels for each IFS. If not provided, numerical indices will be used. - title (str, optional): The title for the plot. - ax (Axes or None): Axes object to draw on. If None, then the current axes are used. Returns: ax Example: ``` # Example Usage: ifses_example = [[0.6, 0.2, 0.2], [0.8, 0.1, 0.1], [0.4, 0.3, 0.3]] labels_example = ['IFS 1', 'IFS 2', 'IFS 3'] ifs_radar_plot(ifses_example, labels=labels_example, title='IFS Comparison') ``` The Spider/Radar Plot visually represents the degree of belief for membership, non-membership, and uncertainty in each IFS. """ if ax is None: ax = plt.subplot(111, polar=True) num_ifses = len(ifses) num_vars = len(ifses[0]) angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist() # The plot is circular, so we need to close the plot loop by appending the start element to the end ifses += [ifses[0]] angles += [angles[0]] # Plot each IFS for i in range(num_ifses): values = ifses[i] values += [values[0]] ax.fill(angles, values, alpha=0.25, label=labels[i] if labels else f'IFS {i + 1}') # Add labels and title ax.set_theta_offset(np.pi / 2) ax.set_theta_direction(-1) ax.set_rlabel_position(0) ax.set_yticklabels([]) ax.set_yticks([]) ax.set_xticks(angles[:-1], ['Membership', 'Non-membership', 'Uncertainty']) ax.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1)) ax.set_title(title if title else 'Intuitionistic Fuzzy Sets Comparison') return ax