plotly로 그린 graph를 기존 웹 앱에 구현해 보았습니다.
개요
이하, flask로 작성한 web application에 sample graph를 렌더링 하는 코드를 소개하겠습니다.
(Plotly Dash도 따로 짜넣을 수 있어, 등의 유식자의 의견 기다리고 있습니다.)
코드
server측에서 데이터를 송신하는 함수를 준비한다.
@bp.route("/get_sample_data", methods=("GET",))
def get_sample_data():
# import pdb; pdb.set_trace()
out = {"y": [0, 14, 3, 17]}
return out
index.html
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
...中略...
{% block graphs %}
<button id="get_data_button"></button>
<div hidden class="result"></div>
<!-- 1. plotly.jsの内容を`#graphDiv`の要素にレンダリングする。 -->
<div id="graphDiv" class="graph">Plotly test</div>
<script>
var data = [{
x: [1999, 2000, 2001, 2002],
y: [10, 15, 13, 17],
type: 'scatter'
}];
//ボタンが押されたらAJAXで非同期通信を実行し、サーバサイドからデータを取得する。
$(function(){
$("#get_data_button").on("click", function(){
$.ajax({
url:'/get_sample_data',
type:'GET',
})
.done((res) => {
$('.result').html(res);
console.log(res);
data.push({
x: [1999, 2000, 2001, 2002],
y: res.y, // res == {"y": [0, 14, 3, 17]} in get_sample_data function in blog.py
type: 'scatter'
});
Plotly.newPlot(graphDiv, data, layout);
}) // check arrow function
}).fail((res) => {
$('.result').html(res);
console.log(res);
})
}
)
var graphDiv = document.getElementById('graphDiv')
var layout = {
height: 500,
title: 'Sales Growth',
xaxis: {
title: 'Year',
showgrid: false,
zeroline: false
},
yaxis: {
title: 'Percent',
showline: false
}
};
Plotly.newPlot(graphDiv, data, layout);
</script>
{% endblock %}
거꾸로 해설
하나하나 분해해 설명합니다(수시 갱신 예정)
#graphDiv
의 요소로 렌더링합니다. #get_data_button
를 id
로 하는 <button>
를 누르면, flask application 에 AJAX 로 GET 통신으로부터 get_sample_data()
를 실행해 데이터를 돌려준다. data
list로 push(res)
한 다음 Plotly.newPlot(graphDiv, data, layout);
를 다시 실행합니다. tutorial로 막힌 곳,
<div>
태그로 하지 않으면 읽어주지 않는 것 같습니다. ( 를 사용해도 platly.js가 그려주지 않습니다. ) 출력되는 그래프의 CSS에 관하여
#graphDiv
에 관해서 사이즈를 변경하도록(듯이) 코딩했지만 전혀 사이즈 변경되지 않고, 매우 곤란했다. Plotly.newPlot(graphDiv, data, layout);
에서 layout에 height, width 키를 추가해 주면 OK였습니다. 참고문헌
Reference
이 문제에 관하여(plotly로 그린 graph를 기존 웹 앱에 구현해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/j_takurou/items/1dfd693649107f8da8d6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)