Source code for yggdrasil.examples.timesync1.plot_timesync

import sys
import numpy as np
from matplotlib import pyplot as plt
from yggdrasil import units
from yggdrasil.communication.AsciiTableComm import AsciiTableComm


[docs]def main(fileA, fileB, example_name): r"""Method to plot comparison of two results.""" if example_name == 'timesync2': figsize = (10.8, 4.8) fig = plt.figure(figsize=figsize) ax1 = fig.add_subplot(2, 2, 1) ax2 = fig.add_subplot(2, 2, 2, sharey=ax1) ax3 = fig.add_subplot(2, 2, 3, sharex=ax1) axs = [ax1, ax2, ax3] else: figsize = None fig = plt.figure(figsize=figsize) ax1 = fig.add_subplot(1, 1, 1) axs = [ax1] dataA = AsciiTableComm('test', address=fileA, direction='recv', as_array=True).recv_dict()[1] dataB = AsciiTableComm('test', address=fileB, direction='recv', as_array=True).recv_dict()[1] xtrue = np.sin(2.0 * np.pi * dataA['time'] / units.add_units(10, 'day')) ytrue = np.cos(2.0 * np.pi * dataA['time'] / units.add_units(5, 'day')) ztrue = -np.cos(2.0 * np.pi * dataA['time'] / units.add_units(20, 'day')) atrue = np.sin(2.0 * np.pi * dataA['time'] / units.add_units(2.5, 'day')) btrue = np.cos(2.0 * np.pi * dataA['time'] / units.add_units(2.5, 'day')) if example_name == 'timesync2': ytrue *= 2.0 dataB['x'] = 2.0 * dataB['xvar'] dataB['y'] = dataB['yvar'] ax1.plot(dataA['time'], xtrue, 'k') ax1.plot(dataA['time'], ytrue, 'k') ax1.plot(dataA['time'], dataA['x'], 'b-', label='x (model A)') ax1.plot(dataA['time'], dataA['y'], 'r-', label='y (model A)') ax1.plot(dataB['time'].to(dataA['time'].units), dataB['x'], 'b--', label='x (model B)') ax1.plot(dataB['time'].to(dataA['time'].units), dataB['y'], 'r--', label='y (model B)') ax1.set_xlabel('Time (%s)' % dataA['time'].units) ax1.set_ylabel('State Value') ax1.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=2) if example_name == 'timesync2': ax2.plot(dataA['time'], ztrue, 'k') ax2.plot(dataA['time'], dataA['z1'], 'o-', label='z1 (model A)') ax2.plot(dataA['time'], dataA['z2'], 'o-', label='z2 (model A)') ax2.plot(dataB['time'].to(dataA['time'].units), dataB['z'], 'o--', label='z (model B)') ax2.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=2) ax3.plot(dataA['time'], atrue, 'k') ax3.plot(dataA['time'], btrue, 'k') ax3.plot(dataA['time'], dataA['a'], 'c-', label='a (model A)') ax3.plot(dataA['time'], dataA['b'], 'm-', label='b (model A)') ax3.plot(dataB['time'].to(dataA['time'].units), dataB['a'], 'c--', label='a (model B)') ax3.plot(dataB['time'].to(dataA['time'].units), dataB['b'], 'm--', label='b (model B)') ax3.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=2) plt.subplots_adjust(left=0.075, right=0.95, wspace=0.1, hspace=0.45) return fig, axs
if __name__ == '__main__': # Take time step from the first argument if len(sys.argv) >= 4: example_name = sys.argv[3] else: example_name = 'timesync1' fig, axs = main(sys.argv[1], sys.argv[2], example_name) plt.show()