Source code for pyEPR.reports

"""
Module for reporting utility functions

@author: Zlatko K Minev
"""

import pandas as pd

from .toolbox.plotting import legend_translucent, plt


def _style_plot_convergence(ax, ylabel=None, xlabel='Pass number', ylabel_col='k', y_title=False):
    ax.set_xlabel(xlabel)
    if ylabel:
        if y_title:
            ax.set_title(ylabel)
        else:
            ax.set_ylabel(ylabel, color=ylabel_col)
    ax.grid()
    ax.autoscale(tight=False)
    ax.set_axisbelow(True)  # Don't allow the axis to be on top of your data
    ax.minorticks_on()
    ax.grid(which='minor', linestyle=':',
            linewidth='0.5', color='black', alpha=0.2)
    ax.grid(which='major', alpha=0.5)


_style_plot_conv_kw = dict(marker='o', ms=4)


[docs]def plot_convergence_max_df(ax, s, kw={}, color='r'): '''For a single pass''' s.plot(ax=ax, **{**dict(c='r'), **_style_plot_conv_kw, **kw}) ax.set_yscale("log") _style_plot_convergence(ax) fig = ax.figure fig.text(0.45, 0.95, s.name, ha="center", va="bottom", size="medium", color=color) ax.tick_params(axis='y', labelcolor=color) #ax.axhline(1.0, color='k', lw=1.5,alpha= 0.35) #ax.axhline(0.1, color='k', lw=1.5,alpha= 0.35) ax.grid(which='minor', linestyle=':', linewidth='0.5', color=color, alpha=0.25) ax.grid(which='major', color='#c4abab', alpha=0.5) ax.spines['left'].set_color(color)
[docs]def plot_convergence_solved_elem(ax, s, kw={}, color='b'): '''For a single pass''' (s/1000).plot(ax=ax, **{**dict(c='b'), **_style_plot_conv_kw, **kw}) _style_plot_convergence(ax) # ax.set_ylim([100,None]) # ax.set_yscale("log") ax.minorticks_off() ax.grid(False) ax.tick_params(axis='y', labelcolor=color) # ax.ticklabel_format(style='sci',scilimits=(0,0)) fig = ax.figure fig.text(0.6, 0.95, 'Solved elements (1000s)', ha="center", va="bottom", size="medium", color=color) ax.spines['left'].set_color('r') ax.spines['right'].set_color(color)
[docs]def plot_convergence_f_vspass(ax, s, kw={}): '''For a single pass''' if s is not None: (s).plot(ax=ax, **{**_style_plot_conv_kw, **kw}) _style_plot_convergence(ax, 'Eigenmode f vs. pass [GHz]', y_title=True) legend_translucent(ax, leg_kw=dict(fontsize=6))
[docs]def plot_convergence_maxdf_vs_sol(ax, s, s2, kw={}): ''' ax, 'Max Δf %', 'Solved elements', kw for plot ''' s = s.copy() s.index = s2 (s).plot(ax=ax, **{**_style_plot_conv_kw, **kw}) _style_plot_convergence(ax, s.name, xlabel='Solved elements', y_title=True) ax.set_yscale("log") ax.set_xscale("log")
# quick and dirty use def _plot_q3d_convergence_main(epr, RES): fig = epr.hfss_report_full_convergence(_display=False) ax = fig.axes[0] ax2 = ax.twinx() ax.cla() ax2.cla() RES['alpha'].plot(ax=ax, c='b') (RES['fQ']*1000).plot(ax=ax2, c='red') from matplotlib import pyplot as plt _style_plot_convergence( ax, 'Alpha (blue), Freq (red) [MHz]', y_title=True) ax2.set_ylabel('Frequency (MHz)', color='r') ax.set_ylabel('Alpha(MHz)', color='b') ax2.spines['right'].set_color('r') ax2.tick_params(axis='y', labelcolor='r') ax.tick_params(axis='y', labelcolor='b') # legend_translucent(ax) # legend_translucent(ax2) ax.set_xlabel('Pass') fig.tight_layout() return fig def _plot_q3d_convergence_chi_f(RES): df_chi = pd.DataFrame(RES['chi_in_MHz'].values.tolist()) df_chi.index.name = 'Pass' df_g = pd.DataFrame(RES['gbus'].values.tolist()) df_g.index.name = 'Pass' fig, axs = plt.subplots(1, 2, figsize=(9, 3.5)) df_chi.plot(lw=2, ax=axs[0]) df_g.plot(lw=2, ax=axs[1]) _style_plot_convergence(axs[0]) _style_plot_convergence(axs[1]) axs[0].set_title(r'$\chi$ convergence (MHz)') axs[1].set_title(r'$g$ convergence (MHz)') return fig