# ENGG4900 Graph Generators # Cal Wing 2023 import os from tqdm import tqdm import pandas as pd import matplotlib.pyplot as plt from makeGraph import makeGraph, UQ_COLOURS as UQC DATA_FILE_PATH = ".\\data\\AERO4450-Group-10-Data-Analysis-v2.xls" actualData = pd.read_excel(DATA_FILE_PATH, sheet_name="Actual Data") actualGraphData = pd.read_excel(DATA_FILE_PATH, sheet_name="Actual Data Graphs") calibrationData = pd.read_excel(DATA_FILE_PATH, sheet_name="Calibration Data") calibrationGraphData = pd.read_excel(DATA_FILE_PATH, sheet_name="Calibration Data Graphs") def makeActualDataGraph(testRun): cols = [f"Unnamed: {3 + testRun*5}", f"Unnamed: {4+ testRun*5}"] data = actualData[cols].rename(columns = {cols[0]:'Time', cols[1]:'Strain'}) data = data[5:505].astype({"Time":"int", "Strain":"float"}) data1 = data[0::2] data2 = data[1::2] return data1, data2 def makeCalibrationDataGraph(testRun): cols = [f"Unnamed: {3 + testRun*5}", f"Unnamed: {2 + testRun*5}"] data = calibrationData[cols].rename(columns = {cols[0]:'Time', cols[1]:'Strain'}) #Blah not all test runs start at the same point blah = 1 if testRun in [0, 4] else 0 data = (data[5:505])[blah::2].astype({"Time":"int", "Strain":"float"}) return data if __name__ == "__main__": if not os.path.isdir("./images"): os.mkdir("./images") if not os.path.isdir("./images/actual"): os.mkdir("./images/actual") if not os.path.isdir("./images/calibration"): os.mkdir("./images/calibration") # Actual Data pbar = tqdm(total=100) for i in [0,1]: graphData = { "figTitle": f"Strain over Time (Runs {i+1} to {i+4})", "figTitleFontSize": 16, "figSize": (8,8), #Yay America, this is in inches :/ # Note: cm = 1/2.54 "plotDim": (2,2), "subPlots":[] } for ii in range(i*4, 4 + i*4): data1, data2 = makeActualDataGraph(ii) newPlot = { "title": f"Run {ii+1}", "xLabel": "Time (ms) - Δt = 10ms", "yLabel": "Strain (ε)", "plots": [ #{"type": "text", "text": "Δt = 10ms", "x":0.99, "y":0.03, "align":("bottom", "right")}, {"type":"scatter", "x": data1["Time"], "y": data1["Strain"], "args":{"s":10, "zorder":2}, "label":"Upper", "colour": UQC["purple"]}, {"type":"scatter", "x": data2["Time"], "y": data2["Strain"], "args":{"s":10, "zorder":1}, "label":"Lower", "colour": UQC["dark_grey"]}, {"type":"plot", "x": data1["Time"], "y": data1["Strain"], "args":{"zorder":0, "alpha":0.25}, "colour": UQC["purple"]}, {"type":"plot", "x": data2["Time"], "y": data2["Strain"], "args":{"zorder":0, "alpha":0.25}, "colour": UQC["dark_grey"]}, ] } fig, _ = makeGraph(graphData, showPlot=False) fig.savefig(f"./images/actual/Run_{ii+1}.png") plt.close(fig) newPlot["yLabel"] = "Strain (ε)" if ii % 2 == 0 else "" graphData["subPlots"].append(newPlot) pbar.update(100/8) pbar.close() #fig, _ = makeGraph(graphData, showPlot=False) #fig.savefig(f"./images/actualData_Runs_{i+1}-_{i+4}.png") # Initial test Data data1, data2 = makeActualDataGraph(8) graphData = { "title": f"Initial Test Data\n\"Run 0\"", "xLabel": "Time (ms) - Δt = 10ms", "yLabel": "Strain (ε)", "plots":[ {"type":"scatter", "x": data1["Time"], "y": data1["Strain"], "args":{"s":10, "zorder":2}, "label":"Upper", "colour": UQC["purple"]}, {"type":"scatter", "x": data2["Time"], "y": data2["Strain"], "args":{"s":10, "zorder":1}, "label":"Lower", "colour": UQC["dark_grey"]}, {"type":"plot", "x": data1["Time"], "y": data1["Strain"], "args":{"zorder":0, "alpha":0.25}, "colour": UQC["purple"]}, {"type":"plot", "x": data2["Time"], "y": data2["Strain"], "args":{"zorder":0, "alpha":0.25}, "colour": UQC["dark_grey"]}, ] } #fig, _ = makeGraph(graphData) #fig.savefig("./images/initTestData.png") #Force vs Pressure Graph cols = [f"Unnamed: 24", f"Unnamed: 25"] data = actualGraphData[cols].rename(columns = {cols[0]:'Force (Thrust)', cols[1]:'Pressure'}) data = data[1:10].astype({"Force":"float", "Pressure":"float"}) avgStrainGraphData = { "title": f"Force vs Absolute Pressure", "xLabel": "Absolute Pressure (kPa)", "yLabel": "Thrust (N)", "plots":[ {"type":"scatter", "x": data["Pressure"], "y": data["Force"], "args":{"s":10, "zorder":2}, "label":"Average Strain", "colour": UQC["purple"]}, {"type":"plot", "x": data["Pressure"], "y": data["Force"], "args":{"zorder":0, "alpha":0.25}, "colour": UQC["purple"]}, ] } fig, _ = makeGraph(avgStrainGraphData) fig.savefig("./images/ForceVsAbsPressure.png") # Calibration Data # Average Data cols = [f"force stuff", f"Unnamed: 25"] data = calibrationGraphData[cols].rename(columns = {cols[0]:'Strain', cols[1]:'Force'}) data = data[2:8].astype({"Strain":"float", "Force":"float"}) avgStrainGraphData = { "title": f"Force vs Average Strain", "xLabel": "Average Strain (με)", "yLabel": "Force (N)", "plots":[ {"type":"scatter", "x": data["Strain"], "y": data["Force"], "args":{"s":10, "zorder":2}, "label":"Average Strain", "colour": UQC["purple"]}, {"type":"plot", "label": "Approximation: y(x) = 0.196722x", "x": data["Strain"], "y": data["Strain"]*0.196722, "args":{"zorder":0, "alpha":0.5}, "colour": UQC["dark_grey"]} ] } #fig, _ = makeGraph(avgStrainGraphData) #fig.savefig("./images/AverageCaliStrain.png") # Actual Data pbar = tqdm(total=100) for i in [0,1]: graphData = { "figTitle": f"Calibration Data\nStrain over Time (Runs {i+1} to {i+4})", "figTitleFontSize": 16, "figSize": (8,8), #Yay America, this is in inches :/ # Note: cm = 1/2.54 "plotDim": (2,2), "subPlots":[] } for ii in range(i*4, 4 + i*3): data = makeCalibrationDataGraph(ii) newPlot = { "title": f"Run {ii+1} - {(ii+1)*50}g", "xLabel": "Time (ms) - Δt = 10ms", "yLabel": "Strain (ε)", "plots": [ {"type":"scatter", "x": data["Time"], "y": data["Strain"], "args":{"s":10, "zorder":2}, "colour": UQC["light_purple"]} ] } fig, _ = makeGraph(newPlot, showPlot=False) fig.savefig(f"./images/calibration/Run_{ii+1}.png") plt.close(fig) newPlot["yLabel"] = "Strain (ε)" if ii % 2 == 0 else "" graphData["subPlots"].append(newPlot) pbar.update(100/7) if bool(i): graphData["subPlots"].append(avgStrainGraphData) #fig, _ = makeGraph(graphData, showPlot=False) #fig.savefig(f"./images/calibData_Runs_{i+1}-_{i+(4 if i != 0 else 3)}.png") pbar.close() plt.show()