頂いた回答をヒントに解決することができました。皆さんありがとうございます。
yambejpさんが仰られていたようにfetchでの解決を試みましたが、promiseオブジェクトの取り扱いがわからなかったためひとまずXMLHttpRequestを用いた方法で解決しました。いかがそのコードになります。openRequest内でrequest.onloadを設定してロード時にプロットさせてしまう処理に変更しました。
javascript
1function openRequest(requestURL, x_col, y_col) {
2 var request = new XMLHttpRequest();
3 request.open('GET', requestURL);
4 request.responseType = 'json';
5 request.onload = function() {
6 var xcol_idx = getColumnIndex(request.response["columns"], x_col);
7 var ycol_idx = getColumnIndex(request.response["columns"], y_col);
8 plot(request.response["data"], xcol_idx, ycol_idx);
9 }
10 request.send();
11 return request;
12}
13
14function getColumnIndex(columns, name) {
15 for(var i = 0; i < columns.length; i++) {
16 if (columns[i] == name){
17 return i;
18 } else {}
19 }
20}
21
22function plot(dataset, xcol_idx, ycol_idx) {
23 var width = 400; // グラフの幅
24 var height = 300; // グラフの高さ
25 var margin = { "top": 30, "bottom": 60, "right": 30, "left": 60 };
26
27 // 2. SVG領域の設定
28 var svg = d3.select("#scatter").append("svg").attr("width", width).attr("height", height);
29
30 // 3. 軸スケールの設定
31 var xScale = d3.scaleLinear()
32 .domain([d3.min(dataset, function(d) { return d[xcol_idx]; }), d3.max(dataset, function(d) { return d[xcol_idx]; })])
33 .range([margin.left, width - margin.right]);
34
35 var yScale = d3.scaleLinear()
36 .domain([d3.min(dataset, function(d) { return d[ycol_idx]; }), d3.max(dataset, function(d) { return d[ycol_idx]; })])
37 .range([height - margin.bottom, margin.top]);
38
39 // 4. 軸の表示
40 var axisx = d3.axisBottom(xScale).ticks(5);
41 var axisy = d3.axisLeft(yScale).ticks(5);
42
43 svg.append("g")
44 .attr("transform", "translate(" + 0 + "," + (height - margin.bottom) + ")")
45 .call(axisx)
46 .append("text")
47 .attr("fill", "black")
48 .attr("x", (width - margin.left - margin.right) / 2 + margin.left)
49 .attr("y", 35)
50 .attr("text-anchor", "middle")
51 .attr("font-size", "10pt")
52 .attr("font-weight", "bold")
53 .text("X Label");
54
55 svg.append("g")
56 .attr("transform", "translate(" + margin.left + "," + 0 + ")")
57 .call(axisy)
58 .append("text")
59 .attr("fill", "black")
60 .attr("x", -(height - margin.top - margin.bottom) / 2 - margin.top)
61 .attr("y", -35)
62 .attr("transform", "rotate(-90)")
63 .attr("text-anchor", "middle")
64 .attr("font-weight", "bold")
65 .attr("font-size", "10pt")
66 .text("Y Label");
67
68 // 5. プロットの表示
69 svg.append("g")
70 .selectAll("circle")
71 .data(dataset)
72 .enter()
73 .append("circle")
74 .attr("cx", function(d) { return xScale(d[xcol_idx]); })
75 .attr("cy", function(d) { return yScale(d[ycol_idx]); })
76 .attr("fill", "steelblue")
77 .attr("r", 4);
78}
79
80var documentElement = document.getElementById("file_info")
81var filename = documentElement.getAttribute("filename")
82var x_col = documentElement.getAttribute("x_col")
83var y_col = documentElement.getAttribute("y_col")
84
85var requestURL = 'http://127.0.0.1:5000/api/data/' + filename;
86openRequest(requestURL, x_col, y_col);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。