IT

Plotlyでグラフ描画の基本を学習してみました

Plotlyは、ブラウザ上で拡大や項目の切り替えができるグラフを描けるライブラリです。Plotly.jsの基本の書き方(newPlot・データ・レイアウト)と、棒・散布図・円・ヒートマップ・3Dグラフのコード例を紹介します。

この記事の結論: Plotlyは、ブラウザ上で拡大や項目の切り替えができるグラフを描けるライブラリで、JavaScriptやPythonなどから使えます。JavaScript版のPlotly.jsなら、ライブラリを読み込み、描画する div を用意して、データとレイアウトを Plotly.newPlot() に渡すだけで、折れ線・棒・散布図・円・ヒートマップ・3Dグラフまで描けます。筆者はASP.NET(C#)のプロジェクトで、画面側のJavaScriptからPlotly.jsを使っています。

現在のプロジェクトで、グラフ描画にPlotlyを使用しているので、
業務で開発を行う前に少しだけ基本を理解してみました。

Plotlyとは?

Plotly は、 インタラクティブなデータ可視化 を簡単に作成できるライブラリです。Python、JavaScriptなど複数の言語に対応しており、Webブラウザ上で動的なグラフを表示 できます。

さらに3D・地図・統計グラフなど種類が豊富で、シンプルなコードで書くことができ、モデルの結果可視化など機械学習にも活用されているのが特徴です。

今のプロジェクトでは、ダッシュボード画面でリアルタイムでグラフ表示を行うのにPlotlyが使用されています。

Plotlyの基本

どのようなコードを書けば、グラフ表示を行えるか簡単に紹介していきます。

【開発環境】
・フレームワーク:ASP.NET (MVC)
・使用言語:フロントエンド:JavaScript / バックエンド:C#
・OS:Mac (個人) / Windows (業務)
・エディタ・IDE:VS Code (個人) / Visual Studio (業務)

グラフ表示

まず初めに簡単なグラフを表示してみます。

Plotly.jsで描いた折れ線グラフ(X軸・Y軸のラベル付き)

html
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Plotly</title>
    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>

<body>
    <div id="myPlot" style="width: 100%; max-width: 700px; height: 400px;"></div>

    <script>
        const trace1 = {
            x: [1, 2, 3, 4, 5],
            y: [10, 15, 7, 12, 17],
            type: 'scatter',
            mode: 'lines+markers',
            name: 'データ1'
        };

        const layout = {
            title: '折れ線グラフ',
            xaxis: { title: 'X軸' },
            yaxis: { title: 'Y軸' }
        };

        Plotly.newPlot('myPlot', [trace1], layout);
    </script>
</body>

</html>

基本ソースコード解説

①Plotly のライブラリを読み込む

Plotly の最新バージョンを読み込み、Plotlyを使用できるようにする。

html
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>

※2026年10月2日追記:plotly-latest.min.js は、v2が出た時点で更新が止まり、v1系の最後の版(1.58.5)のままです(plotly.js の README、2026年10月2日確認)。新しい版を使うときは、https://cdn.plot.ly/plotly-<バージョン>.min.js のようにバージョンを指定して読み込みます。また、v3以降はタイトルを文字列で渡す書き方(title: '折れ線グラフ')が使えなくなり、title: { text: '折れ線グラフ' } と書く必要があります(Plotly公式の移行ガイド、2026年10月2日確認)。

②グラフ描画エリアの作成

・グラフを表示するための div 要素を追加
・id="myPlot" グラフ描画のためのid指定
・ style で最大幅700px、高さ400pxに紹介用で設定

html
<div id="myPlot" style="width: 100%; max-width: 700px; height: 400px;"></div>

③データ作成

js
const trace1 = {
    x: [1, 2, 3, 4, 5],
    y: [10, 15, 7, 12, 17],
    type: 'scatter',
    mode: 'lines+markers',
    name: 'データ1'
};
  • x: X軸のデータ (1, 2, 3, 4, 5)
  • y: Y軸のデータ (10, 15, 7, 12, 17)
  • type: 'scatter': グラフの種類を設定
  • mode: 'lines+markers': 描画方法を設定
  • name: 'データ1': 出力グラフのラベル

④レイアウトの設定

js
const layout = {
    title: '折れ線グラフ',
    xaxis: { title: 'X軸' },
    yaxis: { title: 'Y軸' }
};
  • title: グラフのタイトル
  • xaxis.title: X軸のラベル
  • yaxis.title: Y軸のラベル

⑤グラフの描画

js
Plotly.newPlot('myPlot', [trace1], layout);
  • Plotly.newPlot(id, データ, レイアウト)
  • 'myPlot': 描画する div の ID
  • [trace1]: グラフのデータ (複数設定可)
  • layout: グラフの見た目設定

Plotlyで描画可能なグラフの種類

Plotlyでは数十種ほどのグラフを描画できるそうです。
その中でよく見るものや興味があるものを
いくつかグラフを紹介してみたいと思います。

グラフ毎のソースコードを載せて、
簡単な説明と使用例についても記載しておきます。

よく使用されるグラフ

棒グラフ(Bar Chart)

Plotly.jsで描いた棒グラフ(カテゴリ1〜5)

js
const trace2 = {
    x: ['カテゴリ1', 'カテゴリ2', 'カテゴリ3', 'カテゴリ4', 'カテゴリ5'],
    y: [10, 15, 7, 12, 17],
    type: 'bar',
    name: '棒グラフデータ'
};

カテゴリごとのデータを棒で表現するグラフで
カテゴリ間の比較を視覚的にわかりやすく示すことができます。

  • 製品別の売上や数量の比較
  • 地域ごとの人口や学業成績の比較

散布図(Scatter Plot)

Plotly.jsで描いた散布図

js
const trace3 = {
    x: [1, 2, 3, 4, 5],
    y: [10, 15, 7, 12, 17],
    mode: 'markers',
    type: 'scatter',
    name: '散布図データ'
};

2つの変数の関係性を点で示すグラフで、データ間の相関関係を視覚的に把握できます。

  • 収入と支出、身長と体重などの関係性
  • 科学実験におけるデータポイントの分布

円グラフ(Pie Chart)

Plotly.jsで描いた円グラフ(4つのカテゴリの比率)

js
const trace4 = {
    labels: ['カテゴリ1', 'カテゴリ2', 'カテゴリ3', 'カテゴリ4'],
    values: [10, 20, 30, 40],
    type: 'pie',
    name: 'パイチャートデータ'
};

円グラフはよく使用されているイメージがあります。
全体に対する各カテゴリの比率を直感的に理解できるのが特徴です。

  • 市場シェアや投票結果の割合
  • 売上の構成比や予算配分

興味があるグラフ

ヒートマップ(Heatmap)

Plotly.jsで描いたヒートマップ(Viridisの配色)

js
const trace5 = {
    z: [
        [1, 20, 30, 40],
        [50, 60, 70, 80],
        [90, 100, 110, 120]
    ],
    type: 'heatmap',
    colorscale: 'Viridis',
    name: 'ヒートマップデータ'
};

ヒートマップは、色を使ってデータの強さや密度を示すグラフです。
色が濃いほど値が高く、色が薄いほど値が低いことを示せます。
「温度」や「強度」などを示すときに使用されるイメージです。

  • ウェブサイトの「ヒートマップ解析」:ユーザーが最もよくクリックした場所やスクロールしたエリアを可視化する。
  • 地図で「どの地域が一番暑いか」を示すとき。

レーダーチャート(Radar Chart)

Plotly.jsで描いたレーダーチャート(項目A〜E)

js
const trace6 = {
    r: [10, 20, 30, 40, 50],
    theta: ['A', 'B', 'C', 'D', 'E'],
    type: 'scatterpolar',
    mode: 'lines+markers',
    name: 'レーダーチャートデータ'
};

いくつかの異なる項目を放射状に並べたグラフです。各項目の評価を、外側に向かって線でつなぎ、比較しやすくします。
筋トレにおいて、種目毎の得意不得意などの比較に使えそうですね。

  • スポーツ選手をスピードや力などの異なる能力で比較するとき。
  • 製品の特徴(価格、品質、機能など)を一度に評価するとき。

3D系のグラフ

3D散布図(3D Scatter Plot)

Plotly.jsで描いた3D散布図

js
const trace7 = {
    x: [1, 2, 3, 4, 5],
    y: [10, 15, 7, 12, 17],
    z: [5, 3, 4, 8, 6],
    mode: 'markers',
    type: 'scatter3d',
    marker: {
        size: 8,
        color: 'rgb(23, 190, 207)',
        opacity: 0.8
    },
    name: '3D散布図データ'
};

const layout7 = {
    title: '3D散布図',
    scene: {
        xaxis: { title: 'X軸' },
        yaxis: { title: 'Y軸' },
        zaxis: { title: 'Z軸' }
    }
};

Plotly.newPlot('scatter3DChart', [trace7], layout7);

3D散布図は、3つの異なる軸(X軸、Y軸、Z軸)を使って、3次元空間上にデータをプロットするグラフです。
データポイントの位置が立体的に表示されるため、複雑な関係性を空間的に理解することができます。

  • 科学的データ(例えば、分子構造や物理現象)を視覚化する場面など

3D表面グラフ(3D Surface Plot)

Plotly.jsで描いた3D表面グラフ(標高のような地形)

コードは少し長くなってしまうので、一部抜粋して記載しておきます。

js
const trace8 = {
    x: x,
    y: y,
    z: z,
    type: 'surface',
    colorscale: 'YlOrBr',
    opacity: 0.95
};

const layout8 = {
    title: {
        text: '3D表面グラフ',
        font: { size: 24, color: '#333' }
    },
    scene: {
        xaxis: { title: 'X軸', showgrid: false, backgroundcolor: "rgba(0,0,0,0)" },
        yaxis: { title: 'Y軸', showgrid: false, backgroundcolor: "rgba(0,0,0,0)" },
        zaxis: { title: '標高 (m)', showgrid: false, backgroundcolor: "rgba(0,0,0,0)" },
        aspectratio: { x: 1, y: 1, z: 0.5 },
        camera: { eye: { x: 1.5, y: 1.5, z: 0.6 } },
        bgcolor: "rgba(0,0,0,0)"
    }
};

3D表面グラフは、3つの変数(X, Y, Z)を使って3次元空間でデータの表面を視覚化するためのグラフです。
X軸とY軸は平面上でデータをプロットし、Z軸でその高さを表現します。

・aspectratio: グラフの縦横比を調整
 x: 1, y: 1, z: 0.5 は、Z軸がX軸とY軸に比べて半分の高さになることを意味します。

・camera: グラフの視点(カメラ)を設定
 eye: 視点の位置を決定します。x: 1.5, y: 1.5, z: 0.6 は、視点を3D空間の特定の位置に設定しています。これにより、グラフの表示角度が決まります。

  • 地形の視覚化(標高や山岳地形のデータなど)

業務で実装しているPlotlyグラフ

簡単なデータを作成して、グラフ表示を行ってもあまり面白くないので、
Stack Overflowの開発者調査結果(https://survey.stackoverflow.co/)から、
1年間で仕事で使用した言語について、年ごとにデータを参照しグラフ化してみました。

※年ごとによって、CSVファイル内の項目名が異なるので、
今回は学習用として、似たような項目名を一つのグラフに示しています。

【折れ線グラフ】

Stack Overflowの開発者調査をもとに、仕事で使った言語を年ごとに描いた折れ線グラフ

【箱ひげ図】

Stack Overflowの開発者調査をもとに描いた箱ひげ図

業務ではこのような感じで、複数のデータに対して、それぞれグラフの表示色を設定し
凡例に項目の一覧を表示するように設定しています。

ソースコードの紹介するには、少し多すぎるので、控えておきます。

まとめ

今回はPlotlyを使用して、グラフの基本的な実装方法と、グラフの種類の一部を紹介しました。

今後業務でPlotlyを技術選定として使用し、このようなグラフを実装する機会があるかどうかはわからないですが、
Plotlyに限らず、Web上で様々なグラフを描けるということだけでも、知っておいて損はないのかなと感じました。

マーケティング面でのデータ分析や機械学習の分野に個人的に興味があるので、
最終的にはこういった分野で活用できるように、今後も学習を進めてみたいと思います。

株式会社bundlyzeでは、AWSでのデータ分析基盤の構築も行っています。業務の数字を、表計算ではなく画面のグラフで見られるようにしたくなったときの見分け方は、Excelの業務管理が限界になったときの7つのサインにまとめています。

よくある質問

C#でもPlotlyのグラフは使えますか?

使えます。筆者の業務のように、ASP.NETの画面でPlotly.jsを読み込めば、C#で用意したデータをJavaScript側でグラフにできます。C#のコードから直接グラフを作りたい場合は、C#向けの部品(Plotly.NET.CSharp)を持つPlotly.NETという選択肢もあります(Plotly.NET、2026年10月2日確認)。

Plotly.jsで散布図を描くには?

データに type: 'scatter' と mode: 'markers' を指定します。mode: 'lines+markers' にすると点を線でつないだ折れ線グラフになり、type: 'scatter3d' にしてz軸のデータを足すと3Dの散布図になります。

グラフの高さや凡例は変えられますか?

レイアウトで変えられます。高さは height、凡例を出すかどうかは showlegend、凡例の位置は legend の x・y で指定します。色はデータごとに marker.color や line.color で決められます。