Files
AERO4450-Graphs/main.py
2023-04-02 23:22:55 +10:00

181 lines
7.6 KiB
Python

# 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
print("Generating Actual Data Graphs...")
pbar = tqdm(total=100)
for i in [0,1]:
graphData = {
"figTitle": f"Strain over Time (Runs {4*i+1} to {4*i+4})",
"figTitleFontSize": 16,
"figSize": (8,8), #Yay America, this is in inches :/ # Note: cm = 1/2.54
"plotDim": (2,2),
"grid": True,
"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 (ε)",
"grid": True,
"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(newPlot, 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_{4*i+1}-{4*i+4}.png")
# Initial test Data
print("Initial Data Graph...")
data1, data2 = makeActualDataGraph(8)
graphData = {
"title": f"Initial Test Data\n\"Run 0\"",
"xLabel": "Time (ms) - Δt = 10ms",
"yLabel": "Strain (ε)",
"grid": True,
"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, showPlot=False)
fig.savefig("./images/initTestData.png")
#Force vs Pressure Graph
print("Generating Force vs Pressure Graph...")
cols = [f"Unnamed: 24", f"Unnamed: 25"]
data = actualGraphData[cols].rename(columns = {cols[0]:'Force', cols[1]:'Pressure'})
data = data[1:10].astype({"Force":"float", "Pressure":"float"})
avgStrainGraphData = {
"title": f"Force (Thrust) vs Absolute Pressure",
"xLabel": "Absolute Pressure (kPa)",
"yLabel": "Thrust (N)",
"grid": True,
"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, showPlot=False)
fig.savefig("./images/ForceVsAbsPressure.png")
# Calibration Data
# Average Data
print("Generating Average Strain Graph...")
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)",
"grid": True,
"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, showPlot=False)
fig.savefig("./images/AverageCaliStrain.png")
# Calibration Date
print("Generating Calibration Data Graphs...")
pbar = tqdm(total=100)
for i in [0,1]:
graphData = {
"figTitle": f"Calibration Data\nStrain over Time (Runs {4*i+1} to {3*i+(4 if i != 0 else 3)})",
"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 (ε)",
"grid": True,
"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_{4*i+1}-{3*i+(4 if i != 0 else 3)}.png")
pbar.close()
plt.show(block=False)
input("Press enter to close all graphs...")
plt.close()