東京都の情報は毎日16:45に東京都福祉保健局からPDFで発表されます。これをスクレープして COVID-tokyo.csv を作成しています。それをPlotlyで棒グラフにしたものです:
このHTMLファイルのheadの中には(だいたい)次のように書き込んであります:
<script src="https://cdn.plot.ly/plotly-2.12.1.min.js"></script> <script src="https://cdn.plot.ly/plotly-locale-ja-latest.js"></script> <script> function plot(data) { let date = [], confirmed = []; for (const row of data.split("\n")) { const r = row.split(','); if (r.length == 2) { date.push(r[0]); confirmed.push(r[1]); } } Plotly.newPlot("out", [ {x: date, y: confirmed, type: "bar", width: 86400000} ], {}, {responsive: true, locale: "ja"}); } window.addEventListener('DOMContentLoaded', function() { fetch('https://okumuralab.org/~okumura/python/data/COVID-tokyo.csv') .then(response => response.text()) .then(data => plot(data)); }); </script>
グラフを出力する部分には次のように書いてあります:
<div id="out"></div>
type:"bar"
で棒グラフを指定しています。width:86400000
でミリ秒単位の1日を棒の幅に設定し,棒どうしの隙間をなくしています(ヒストグラムのようにしています)。
月の名前が Jan, Feb, ... ではなく1月,2月,…と日本語化されています。こうするために,plotly-locale-ja-latest.js
を読み込み,Plotly.newPlot()
の第4引数に {locale: "ja"}
を指定しています。
土日だけ色を変えたい場合は,積み重ね棒グラフ({barmode: 'stack'}
)にするのが簡単です。
function plot(data) { let date = [], wday = [], wend = []; for (const row of data.split("\n")) { const r = row.split(','); if (r.length == 2) { date.push(r[0]); d = (new Date(r[0])).getDay(); if (d == 0 || d == 6) { wday.push(0); wend.push(r[1]); } else { wday.push(r[1]); wend.push(0); } } } Plotly.newPlot("out", [ {name: "平日", x: date, y: wday, type: "bar"}, {name: "土日", x: date, y: wend, type: "bar"} ], {barmode: 'stack', legend: {x: 0, y: 1}}, {responsive: true, locale: "ja"}); }