Source code for pyifdm.graphs.ifs_heatmap_plot

# Copyright (c) 2023 Jakub Więckowski

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

[docs] def ifs_heatmap_plot(ifs_matrix, cmap='Blues', labels=None, ax=None): """ Visualize a matrix plot for Intuitionistic Fuzzy Sets (IFS). Parameters: - ifs_matrix (list of lists): A matrix of IFS values where each row represents an IFS. - labels (list of str, optional): labels for each row in the matrix. - ax (Axes or None): Axes object to draw on. If None, then the current axes are used. Returns: ax Example: ``` # Example Usage: ifs_matrix_example = [ [0.6, 0.2, 0.2], [0.8, 0.1, 0.1], [0.4, 0.3, 0.3] ] labels_example = ['Set 1', 'Set 2', 'Set 3'] ifs_heatmap_plot(ifs_matrix_example, labels=labels_example) ``` The matrix plot displays the degree of belief for membership, non-membership, and uncertainty of multiple Intuitionistic Fuzzy Sets. """ # Convert the ifs_matrix to a NumPy array for compatibility ifs_matrix = np.array(ifs_matrix) if ax is None: ax = plt.gca() # Create matrix plot im = ax.imshow(ifs_matrix, cmap=cmap, vmin=0, vmax=1) # Normalize the threshold to the images color range. threshold = im.norm(ifs_matrix.max())/2. # Set labels and title if labels is None: labels = [f'IFS {i+1}' for i in range(len(ifs_matrix))] ax.set_yticks(np.arange(len(labels)) if labels else np.arange(len(ifs_matrix))) ax.set_yticklabels(labels) ax.set_xticks(np.arange(3)) ax.set_xticklabels(['Membership', 'Non-membership', 'Uncertainty']) ax.set_ylabel('Intuitionistic Fuzzy Sets') kw = dict(horizontalalignment="center", verticalalignment="center") textcolors=("black", "white") # Get the formatter in case a string is supplied valfmt = matplotlib.ticker.StrMethodFormatter("{x:.2f}") # Loop over data dimensions and create text annotations. for i in range(len(ifs_matrix)): for j in range(len(ifs_matrix)): kw.update(color=textcolors[int(im.norm(ifs_matrix[i, j]) > threshold)]) im.axes.text(j, i, valfmt(ifs_matrix[i, j], None), **kw) # Display colorbar cbar = ax.figure.colorbar(im, ax=ax) cbar.set_label('Degree of Belief') return ax