2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[JavaScript] plotly.jsで時刻を表示する線の出し方を考えてみた件

Last updated at Posted at 2019-07-27

概要

 シミュレーションを行っているときに統計結果を表示していたのだが、一目でシミュレーション中のデータがどこなのか表示したかった。しかし調べてみてもなかなかいい感じのものがなかったので、考えてみた。

使用ツール等

  • plotly.js
    • ver 1.49.0

コード

 説明するより先にコードと動いている例を見てもらおうと思う。

  • html

    <!DOCTYPE html>
    <html>
    <head>
        <title>plotly.jsで時刻を表示する線の出し方を考えてみた件</title>
        <meta charset="UTF-8">
        <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
        <script src="./main.js"></script>
    </head>
    <body>
        <div id="graph" style="height: 400px; width: 100%"></div>
    </body>
    </html>
    
  • javascript

    window.onload = (e) => {
        /* グラフを表示 */
        let id = 'graph';
        let data = [
            /* グラフデータ */
            {
                x: [0, 1, 2, 3, 4, 5],
                y: [10, 30, 60, 40, 50, 70],
                type: 'line'
            },
            /* 時間を表す線の初期データ */
            {
                x: [0, 0],
                y: [10, 70],
                type: 'line'
            }
        ];
        let layout = {};
        Plotly.newPlot(id, data, layout);
        /* 1秒ごとに時間を表す線を移動させる */
        let i = 0;
        setInterval((e) => {
            /* データを更新する */
            i += 0.5;
            if (i > 5) {
                i = 0;
            }
            // data[1] = {...} の場合、凡例で非表示にしても1秒後に表示されしまうので注意
            data[1].x = [i, i];
            /* updateを行い反映させる */
            Plotly.update(id, data, layout);
        }, 1000);
    };
    
  • 動作例

See the Pen WVoZYm by P488 (@P488) on CodePen.

コードの解説

  1. グラフを表示する時に、グラフのデータに加えて線のデータを追加する。
    この時のxの値は開始位置、yの値はグラフの最大と最小を指定する。

    let data = [
        /* グラフデータ */
        {
            x: [0, 1, 2, 3, 4, 5],
            y: [10, 30, 60, 40, 50, 70],
            type: 'line'
        },
        /* 時間を表す線の初期データ */
        {
            x: [0, 0],
            y: [10, 70],
            type: 'line'
        }
    ];
    
  2. setIntervalを使用してx軸の値を変化させ、あたかも動いているように見せる。

    /* 1秒ごとに時間を表す線を移動させる */
    let i = 0;
    setInterval((e) => {
        /* データを更新する */
        i += 0.5;
        if (i > 5) {
            i = 0;
        }
        // data[1] = {...} とした場合、凡例で非表示にしてもupdateで再表示されしまうので注意
        data[1].x = [i, i];
        /* updateを行い反映させる */
        Plotly.update(id, data, layout);
    }, 1000);
    

終わりに

今回掲載したコードは掲載用に作成したコードなので、穴があると思うが容赦して貰いたい。今後もPlotlyを使用してもらえた思う次第...

何かあったらコメントください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?