acgc.modetools

Graphical display of eigenmodes

 1#!/usr/bin/env python3
 2'''Graphical display of eigenmodes'''
 3
 4import numpy as np
 5import matplotlib.pyplot as plt
 6
 7def show_modes( labels, eigval, eigvec, ax=None ):
 8    '''Plot figure showing eigenmodes
 9    
10    This program assumes that all modes will be displayed, so it is expected that
11    len(labels) = len(eigval) = nmodes and eigvec has shape nmodes x nmodes. 
12
13    Arguments
14    ---------
15    labels : list, str
16        names for the component variables decomposed into modes
17    eigval : list or array, float
18        eigenvalues
19    eigvec : 2D array, float
20        eigenvector matrix. Vectors should be the columns of eigvec
21    ax : subplot axis (optional)
22        location where graph will be displayed. If not provided, then a new axis will be created.        
23    '''
24
25    # Number of modes
26    nmodes = len(eigval)
27
28    # Ensure number of labels equals number of modes
29    if len(labels) != nmodes:
30        raise ValueError( 'Provide one label per eigenmode')
31
32    # Create new axis if one is not passed
33    if ax is None:
34        ax = plt.axes()
35
36    # Sort the modes from largest to smallest eigenvalue
37    idx = np.argsort( np.abs(eigval) )[::-1]
38    eigval = eigval[idx]
39    eigvec = eigvec[:,idx]
40
41    # Plot the modes
42    for i in range(nmodes):
43        # Vertical gray line for reference
44        ax.plot( [i*2,i*2], [0,nmodes-1], color='gray')
45        # Plot mode i
46        ax.plot( i*2 + eigvec[::-1,i],  np.arange(nmodes), 'o-' )
47
48    # xaxis labels
49    xlabel = [ '{:#.2g}\n({:#.2g})'.format(x,np.abs(1/x)) for x in eigval]
50
51    # Set ticks and labels
52    ax.set( yticks=np.arange(nmodes),
53            yticklabels=labels[::-1],
54            xticks=np.arange(nmodes)*2,
55            xticklabels=xlabel,
56            ylabel='Reservoir',
57            xlabel='Modes: Eigenvalue\n(Time scale)')
58
59    plt.tight_layout()
def show_modes(labels, eigval, eigvec, ax=None):
 8def show_modes( labels, eigval, eigvec, ax=None ):
 9    '''Plot figure showing eigenmodes
10    
11    This program assumes that all modes will be displayed, so it is expected that
12    len(labels) = len(eigval) = nmodes and eigvec has shape nmodes x nmodes. 
13
14    Arguments
15    ---------
16    labels : list, str
17        names for the component variables decomposed into modes
18    eigval : list or array, float
19        eigenvalues
20    eigvec : 2D array, float
21        eigenvector matrix. Vectors should be the columns of eigvec
22    ax : subplot axis (optional)
23        location where graph will be displayed. If not provided, then a new axis will be created.        
24    '''
25
26    # Number of modes
27    nmodes = len(eigval)
28
29    # Ensure number of labels equals number of modes
30    if len(labels) != nmodes:
31        raise ValueError( 'Provide one label per eigenmode')
32
33    # Create new axis if one is not passed
34    if ax is None:
35        ax = plt.axes()
36
37    # Sort the modes from largest to smallest eigenvalue
38    idx = np.argsort( np.abs(eigval) )[::-1]
39    eigval = eigval[idx]
40    eigvec = eigvec[:,idx]
41
42    # Plot the modes
43    for i in range(nmodes):
44        # Vertical gray line for reference
45        ax.plot( [i*2,i*2], [0,nmodes-1], color='gray')
46        # Plot mode i
47        ax.plot( i*2 + eigvec[::-1,i],  np.arange(nmodes), 'o-' )
48
49    # xaxis labels
50    xlabel = [ '{:#.2g}\n({:#.2g})'.format(x,np.abs(1/x)) for x in eigval]
51
52    # Set ticks and labels
53    ax.set( yticks=np.arange(nmodes),
54            yticklabels=labels[::-1],
55            xticks=np.arange(nmodes)*2,
56            xticklabels=xlabel,
57            ylabel='Reservoir',
58            xlabel='Modes: Eigenvalue\n(Time scale)')
59
60    plt.tight_layout()

Plot figure showing eigenmodes

This program assumes that all modes will be displayed, so it is expected that len(labels) = len(eigval) = nmodes and eigvec has shape nmodes x nmodes.

Arguments

labels : list, str names for the component variables decomposed into modes eigval : list or array, float eigenvalues eigvec : 2D array, float eigenvector matrix. Vectors should be the columns of eigvec ax : subplot axis (optional) location where graph will be displayed. If not provided, then a new axis will be created.