Skip to content
Snippets Groups Projects
Verified Commit 63af6e85 authored by Owen Graham's avatar Owen Graham
Browse files

Make plots return images instead of image elements

parent 8fb8decd
Branches
No related tags found
No related merge requests found
...@@ -53,16 +53,9 @@ function indexVisualize() { ...@@ -53,16 +53,9 @@ function indexVisualize() {
var repo_link = document.getElementById("repo_link"); var repo_link = document.getElementById("repo_link");
var divider = document.getElementById("divider"); var divider = document.getElementById("divider");
divider.innerHTML = "<hr>" divider.innerHTML = "<hr>"
fetch($SCRIPT_ROOT + "/plot?name=" + name + "&year=" + year + "&measurement=" + meas) var img = document.createElement("img");
.then(function (response) { img.src = $SCRIPT_ROOT + "/plot?name=" + name + "&year=" + year + "&measurement=" + meas;
return response.text(); graph.replaceChildren(img);
})
.then(function (response) {
graph.innerHTML = response;
})
.catch(function (err) {
console.log('error: ' + err);
});
fetch($SCRIPT_ROOT + "/record/link?name=" + name + "&year=" + year) fetch($SCRIPT_ROOT + "/record/link?name=" + name + "&year=" + year)
.then(function (response) { .then(function (response) {
return response.text(); return response.text();
...@@ -129,16 +122,9 @@ function boxplotVisualize() { ...@@ -129,16 +122,9 @@ function boxplotVisualize() {
var repo_link = document.getElementById("repo_link"); var repo_link = document.getElementById("repo_link");
var divider = document.getElementById("divider"); var divider = document.getElementById("divider");
divider.innerHTML = "<hr>" divider.innerHTML = "<hr>"
fetch($SCRIPT_ROOT + "/plot/boxplot?name=" + name + "&year1=" + year + "&year2=" + year2 +"&measurement=" + meas) var img = document.createElement("img");
.then(function (response) { img.src = $SCRIPT_ROOT + "/plot/boxplot?name=" + name + "&year1=" + year + "&year2=" + year2 +"&measurement=" + meas;
return response.text(); graph.replaceChildren(img);
})
.then(function (response) {
graph.innerHTML = response;
})
.catch(function (err) {
console.log('error: ' + err);
});
fetch($SCRIPT_ROOT + "/record/link?name=" + name + "&year=" + year) fetch($SCRIPT_ROOT + "/record/link?name=" + name + "&year=" + year)
.then(function (response) { .then(function (response) {
return response.text(); return response.text();
...@@ -225,18 +211,10 @@ function overlay() { ...@@ -225,18 +211,10 @@ function overlay() {
var repo_link2 = document.getElementById("repo_link2"); var repo_link2 = document.getElementById("repo_link2");
var divider = document.getElementById("divider"); var divider = document.getElementById("divider");
divider.innerHTML = "<hr>" divider.innerHTML = "<hr>"
fetch($SCRIPT_ROOT + "/plot/overlay?name1=" + name var img = document.createElement("img");
+ "&year1=" + year + "&name2=" + name2 + "&year2=" + year2 img.src = $SCRIPT_ROOT + "/plot/overlay?name1=" + name + "&year1=" + year
+ "&measurement=" + meas) + "&name2=" + name2 + "&year2=" + year2 + "&measurement=" + meas;
.then(function (response) { graph.replaceChildren(img);
return response.text();
})
.then(function (response) {
graph.innerHTML = response;
})
.catch(function (err) {
console.log('error: ' + err);
});
fetch($SCRIPT_ROOT + "/record/link?name=" + name + "&year=" + year) fetch($SCRIPT_ROOT + "/record/link?name=" + name + "&year=" + year)
.then(function (response) { .then(function (response) {
return response.text(); return response.text();
... ...
......
#!/home/ograham/venv/bin/python3 #!/home/ograham/venv/bin/python3
import base64
from dataclasses import make_dataclass from dataclasses import make_dataclass
import datetime import datetime
from io import BytesIO from io import BytesIO
...@@ -11,7 +10,7 @@ from types import SimpleNamespace ...@@ -11,7 +10,7 @@ from types import SimpleNamespace
from urllib.request import urlopen from urllib.request import urlopen
from wsgiref.handlers import CGIHandler from wsgiref.handlers import CGIHandler
from flask import abort, Flask, jsonify, render_template, request from flask import abort, Flask, jsonify, render_template, request, Response
import matplotlib import matplotlib
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np import numpy as np
...@@ -168,7 +167,7 @@ def plot_boxplot(): ...@@ -168,7 +167,7 @@ def plot_boxplot():
) )
plt.suptitle(f'{meas.title} measurements, {name} Station, ' plt.suptitle(f'{meas.title} measurements, {name} Station, '
f'{start_year} - {end_year}.') f'{start_year} - {end_year}.')
return savefig_html_png(fig) return savefig_response(fig)
@app.route('/plot') @app.route('/plot')
...@@ -198,7 +197,7 @@ def plot(): ...@@ -198,7 +197,7 @@ def plot():
) )
plt.suptitle(f'{meas.title} measurements, {name} Station, ' plt.suptitle(f'{meas.title} measurements, {name} Station, '
f'{data[0][0].year}') f'{data[0][0].year}')
return savefig_html_png(fig) return savefig_response(fig)
@app.route('/plot/overlay') @app.route('/plot/overlay')
...@@ -252,15 +251,14 @@ def plot_overlay(): ...@@ -252,15 +251,14 @@ def plot_overlay():
title_dsets = ' / '.join(f'{dset.name} Station, {dset.data[0][0].year}' title_dsets = ' / '.join(f'{dset.name} Station, {dset.data[0][0].year}'
for dset in datasets) for dset in datasets)
plt.suptitle(f'{meas.title} measurements, {title_dsets}') plt.suptitle(f'{meas.title} measurements, {title_dsets}')
return savefig_html_png(fig) return savefig_response(fig)
def savefig_html_png(fig): def savefig_response(fig):
"""Generate an HTML tag with the base64-encoded PNG image.""" """Make an image response with `fig.savefig()`."""
buf = BytesIO() buf = BytesIO()
fig.savefig(buf, format='png') fig.savefig(buf, format='png')
png_data = base64.b64encode(buf.getbuffer()).decode('ascii') return Response(buf.getvalue(), mimetype='image/png')
return f"<img src='data:image/png;base64,{png_data}'/>"
def get_query(key, to=str): def get_query(key, to=str):
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment