Files
cmdla/project/plotting/QR.py

69 lines
2.9 KiB
Python
Raw Normal View History

2024-07-30 14:43:25 +02:00
from config import QR_RESULTS, PLOTS_PATH, nanoseconds_to_seconds, setup
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns
import numpy as np
def plot_lambda(kind, smoothing_window=2):
if kind not in ['error', 'time']:
raise ValueError("kind must be one of 'error', 'time'")
df = pd.read_csv(QR_RESULTS.format("statisticsQR-lambda-m300n20--{}.csv".format(kind)))
lambda_values = df['lambda']
if kind == 'time':
setup(title='QR running time with respect to λ', y_label='Time (s)', x_label='λ')
meantime_values = df['meantime']
stdtime_values = df['stdtime']
sns.lineplot(data=df, x='lambda', y='meantime', label='Mean Time', color='blue')
plt.fill_between(
lambda_values,
meantime_values - stdtime_values,
meantime_values + stdtime_values,
alpha=0.3,
label='Standard Deviation',
color='lightblue'
)
plt.ylim(0, 3.5 * max(meantime_values + stdtime_values))
plt.gca().yaxis.set_major_formatter(ticker.FuncFormatter(nanoseconds_to_seconds))
else:
setup(title='QR errors with respect to λ', y_label='Error', x_label='λ')
df['relative'] = np.convolve(df['relative'], np.ones(smoothing_window) / smoothing_window, mode='same')
df['residual'] = np.convolve(df['residual'], np.ones(smoothing_window) / smoothing_window, mode='same')
df['stability'] = np.convolve(df['stability'], np.ones(smoothing_window) / smoothing_window, mode='same')
sns.lineplot(data=df, x='lambda', y='relative', label='Relative Error', color='blue')
sns.lineplot(data=df, x='lambda', y='residual', label='Residual', color='red')
sns.lineplot(data=df, x='lambda', y='stability', label='Stability', color='green')
plt.yscale('log')
plt.legend(loc='upper right', fontsize=15)
plt.xscale('log', base=10)
plt.savefig(PLOTS_PATH.format('QR', "QR-lambda-{}.png".format(kind)))
plt.show()
def plot_forward_error(smoothing_window=5):
df = pd.read_csv(QR_RESULTS.format("statisticsQR-forward-m300n20--error.csv"))
setup(title='QR forward error with respect to λ', y_label='Error', x_label='λ')
df['forwardQ'] = np.convolve(df['forwardQ'], np.ones(smoothing_window) / smoothing_window, mode='same')
df['forwardR'] = np.convolve(df['forwardR'], np.ones(smoothing_window) / smoothing_window, mode='same')
sns.lineplot(data=df, x='lambda', y='forwardQ', label='Forward Error on Q', color='blue')
sns.lineplot(data=df, x='lambda', y='forwardR', label='Forward Error on R', color='red')
plt.yscale('log')
plt.xscale('log', base=10)
plt.legend(loc='upper right', fontsize=15)
plt.savefig(PLOTS_PATH.format('QR', "QR-forward_error.png"))
plt.show()
if __name__ == '__main__':
plot_lambda('error')
plot_lambda('time')
plot_forward_error()