From d9c48360381f5eab437fac851f54b3494b91f3fd Mon Sep 17 00:00:00 2001 From: Cal W <20716204+calw20@users.noreply.github.com> Date: Sun, 2 Apr 2023 21:40:43 +1000 Subject: [PATCH] Add textboxes --- data/AERO4450-Group-10-Data-Analysis-v2.xls | Bin 1319424 -> 1317376 bytes main.py | 31 +++++++++++++++----- makeGraph.py | 23 +++++++++++++-- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/data/AERO4450-Group-10-Data-Analysis-v2.xls b/data/AERO4450-Group-10-Data-Analysis-v2.xls index a0b45e4915cead233f92fadfd309670c19f46f87..f95ac7ca70ed81fd42ea0319978d8763a8600606 100644 GIT binary patch delta 10755 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 J{}h7izX3u1*=hg) delta 11204 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 rD#hxR3*QU7_9y87gYZTAJ&un diff --git a/main.py b/main.py index 9e240fd..6239af0 100644 --- a/main.py +++ b/main.py @@ -45,8 +45,6 @@ if __name__ == "__main__": "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 - "xLabel": "x label", - "yLabel": "y label", "plotDim": (2,2), "subPlots":[] } @@ -54,10 +52,11 @@ if __name__ == "__main__": 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":[ + "title": f"Run {ii+1}", + "xLabel": "Time (ms)", + "yLabel": "Strain (ε)" if ii % 2 == 0 else "", + "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"]}, @@ -66,8 +65,24 @@ if __name__ == "__main__": } graphData["subPlots"].append(newPlot) - fig, _ = makeGraph(graphData, showPlot=False) - fig.savefig(f"./images/actualData_Runs_{i+1}-_{i+4}") + fig, ax = 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") # Calibration Data diff --git a/makeGraph.py b/makeGraph.py index c554d6c..55812d3 100644 --- a/makeGraph.py +++ b/makeGraph.py @@ -123,11 +123,12 @@ def makeGraph(graphData, showPlot=True, doProgramBlock=True): #Draw many plots as needed # Also provide functions for drawing other types of lines if "plots" in axGraphData: - getSafeValue = lambda key: pData[key] if key in pData else None #Only return the key-value if present in pData - getSafeValue2 = lambda key, key2: pData[key][key2] if key in pData and key2 in pData[key] else None for pData in axGraphData["plots"]: + getSafeValue = lambda key, result=None: pData[key] if key in pData else result #Only return the key-value if present in pData + getSafeValue2 = lambda key, key2, result=None: pData[key][key2] if key in pData and key2 in pData[key] else result getSafeColour = getSafeValue("colour") or getSafeValue("color") #Figen American Spelling - optArgs = {} if "args" not in pData else pData["args"] #Allow for other args to be passed in + optArgs = getSafeValue("args", {}) #Allow for other args to be passed in + if "type" not in pData or pData["type"] == "plot": ax.plot(pData["x"], pData["y"], label=getSafeValue("label"), color=getSafeColour, **optArgs) elif pData["type"] == "hLine": @@ -190,6 +191,22 @@ def makeGraph(graphData, showPlot=True, doProgramBlock=True): if "colourBar" in pData: cBarOptArgs = pData["colourBar"]["optArgs"] if "optArgs" in pData["colourBar"] else {} colorbar(ims, extend=getSafeValue2("colourBar", "extend"), **cBarOptArgs) + elif pData["type"] == "text": + if not "props" in pData: + props = { + "boxstyle" : getSafeValue("boxstyle", "round"), + "facecolor": getSafeValue("facecolor", getSafeValue("facecolour", "wheat")), + "alpha" : getSafeValue("alpha", 0.5) + } + + align = ( + getSafeValue("valign", None), + getSafeValue("halign", None), + ) + align = getSafeValue("align", align) + + ax.text(getSafeValue("x", 0.05), getSafeValue("y", 0.95), pData["text"], transform=ax.transAxes, fontsize=getSafeValue("fontsize", None), va=align[0], ha=align[1], bbox=props) + #Set extra options as needed if "xLabel" in axGraphData: ax.set_xlabel(axGraphData["xLabel"]) # Add an x-label to the axes.