# This Python file uses the following encoding: utf-8
import numpy as np
import pandas as pd
from plotly.subplots import make_subplots
import plotly.graph_objects as go
from .colors import colorlist
[docs]class Radar:
[docs] def __init__(self, df1, atlas, df2=None):
"""
Constructor.
:param df1: [pd.DataFrame] df gotten from Decomposition.df
:param atlas: [dmd.datasets.Atlas] from Decomposition
:param df2: [pd.DataFrame] df gotten from Decomposition.df
"""
df1_ = df1.copy()
df1_['group'] = [1] * df1_.shape[0]
if df2 is not None:
df2_ = df2.copy()
df2_['group'] = [2] * df2_.shape[0]
self.analysis = False
else:
df2_ = None
self.analysis = True
self.df = pd.concat([df1_, df2_])
self.networks = list(atlas.networks.keys())
def _add_trace(self, fig, mode, group, color, imag=False):
"""
Adds adequate trace to figure
:param fig: [go.Figure]
:param mode: [int] mode (1, 2, ...)
:param comp: [str] 'real' or 'imag'
:param group: [int] group (1, 2, )
:param color: [str] line color in css standards
"""
r_r = self.df.loc[(self.df['mode'] == mode) & (self.df['group'] == group)].strength_real.to_list()[0]
r_i = self.df.loc[(self.df['mode'] == mode) & (self.df['group'] == group)].strength_imag.to_list()[0]
verbalise = 'Mode {}'.format(mode)
verbalise += ' Group {}'.format(group) if not self.analysis else ''
fig.add_trace(go.Scatterpolar(
r=self._close(r_r), theta=self._close(self.networks), mode="lines",
legendgroup=verbalise, showlegend=True, name=verbalise, subplot="polar1",
line=dict(color=color, dash='dash' if group != 1 else None)
), row=1, col=1)
if imag:
fig.add_trace(go.Scatterpolar(
r=self._close(r_i), theta=self._close(self.networks), mode="lines",
legendgroup=verbalise, showlegend=False, name=verbalise, subplot="polar2",
line=dict(color=color, dash='dash' if group != 1 else None),
), row=1, col=2)
@staticmethod
def _close(li):
assert isinstance(li, list)
li.append(li[0])
return li