Python

Plotlyとは?Pythonでインタラクティブなグラフを作る基本と使い方

Plotly(プロットリー)は、ズームやホバー、クリックに反応するインタラクティブなグラフをPythonで手軽に作れるオープンソースのライブラリです。読み方は「プロットリー」で、Web表示を前提とする点がMatplotlibとの最大の違いです。この記事では、Plotlyの概要と読み方、インストールから散布図・折れ線・ガントチャートを作る手順、そしてMatplotlibとの使い分けまでを、実際に動くコードとともに整理します。色指定やReact連携など具体的な作り込みはPlotlyの色(color)指定と使い方|Express・React・画像出力までで扱います。

まとめ:Plotlyの要点

  • Plotly=Web向けインタラクティブ可視化ライブラリ。読み方は「プロットリー」、Python・R・JavaScriptなどから使える。
  • 入口は高レベルAPIのplotly.express(公式推奨)。px.scatterなど1行でグラフができる。
  • 散布図はpx.scatter、折れ線はpx.line、ガントチャートはpx.timeline(旧create_ganttは非推奨)。
  • 細かい制御が要るときだけ低レベルのplotly.graph_objectsgo.Figure)を使う。
  • 静的な出版品質の図や超大量データはMatplotlib、探索・共有・ダッシュボードはPlotlyが向く。

以下で、定義・グラフ種類・導入手順・作図例・Matplotlibとの違いの順に見ていきます。

Plotlyとは何か:読み方と全体像

Plotlyはカナダ発のデータ可視化プロダクト群で、中核はJavaScript製のオープンソースライブラリplotly.jsです(plotly.jsは2012年頃からOSSとして公開されています)。Pythonから使うplotly.pyはこのplotly.jsのラッパーで、生成したグラフはHTMLとして書き出され、ブラウザ上でズーム・パン・ホバーなどの操作ができます。ライセンスはMITで、商用利用を含めて無料で使えます。

「Plotly」という語は、(1)Pythonライブラリplotly.py、(2)JavaScriptライブラリplotly.js、(3)Pythonでデータ分析Webアプリを作るフレームワークDash、の総称として使われます。この記事で「Plotly」と書く場合は、特記なければPythonライブラリを指します。

Plotlyの読み方と「何ができるか」

読み方は「プロットリー」です。できることを一言でいえば、コードで作ったグラフをそのまま操作可能なWebグラフにすることです。点にカーソルを合わせると値が出るホバー、範囲を囲んで拡大するズーム、凡例クリックで系列を出し入れする操作などが、追加実装なしで標準で付きます。データ探索、社内ダッシュボード、レポート共有のように「見せて触ってもらう」用途で効果を発揮します。

Plotlyで作れるグラフの種類

基本的な統計グラフから3D・地図まで幅広く、いずれもplotly.expressの関数1つに対応します。よく使うものを用途とともに示します。

グラフ Express関数 主な用途
散布図 px.scatter 2変数の相関・分布
折れ線 px.line 時系列の推移
棒グラフ px.bar カテゴリ比較
ヒストグラム px.histogram 分布・度数
箱ひげ図 px.box ばらつき・外れ値
ヒートマップ px.imshow 行列・密度
3D散布図 px.scatter_3d 3次元の分布
地図 px.choropleth 地理データの塗り分け
ガントチャート px.timeline 工程・日程の可視化

どのグラフも戻り値はFigureオブジェクトなので、作った後に色や軸ラベルを同じ書き方で調整できます。次章から実際にインストールして描いてみます。

Plotlyのインストールと最初のグラフ

必要なのはPython環境(3.8以上)とpipだけです。仮想環境を有効にした状態で次を実行します。

pip install plotly

# バージョン確認(2026年時点の最新は 6.9.0)
python -c "import plotly; print(plotly.__version__)"

インストールできたら、付属のサンプルデータで散布図を1枚描いてみます。fig.show()を呼ぶと、ブラウザ(またはJupyter)に操作可能なグラフが開きます。

import plotly.express as px

df = px.data.iris()          # 付属のアヤメのサンプルデータ
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
fig.show()

これだけで、種類ごとに色分けされ、点にホバーすると値が出る散布図ができます。同じことを低レベルAPIで書くと数倍の記述量になるため、まずはplotly.expressから始めるのが公式にも推奨されています。

plotly.expressとgraph_objectsの違い・使い分け

Plotlyには書き方が2系統あります。判断基準はシンプルで、まずplotly.expressで書き、それで表現できない構成のときだけplotly.graph_objectsに降りるのが実務的です。

  • plotly.express(px):高レベル。1関数=1グラフで簡潔。データ探索・定型グラフはこれで足りる。
  • plotly.graph_objects(go):低レベル。異なる種類のサブプロット併置や二軸グラフなど、pxで組みにくい構成を細かく制御できる。

graph_objectsで折れ線を作ると次のようになります。add_traceで系列を足し、update_layoutでタイトルや軸を設定する流れです。

import plotly.graph_objects as go

fig = go.Figure()
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 1, 2], mode="lines+markers", name="売上"))
fig.update_layout(title="月次売上", xaxis_title="月", yaxis_title="金額")
fig.show()

散布図と折れ線グラフの作り方

Plotlyで検索されやすいのが散布図と折れ線です。どちらもplotly.expressの1行で描け、引数を足すだけで色分けやマーカー表示に対応できます。

散布図はcolorsizeにカラム名を渡すと、その列の値で自動的に色や大きさが割り当てられます。

import plotly.express as px

df = px.data.iris()
fig = px.scatter(
    df, x="sepal_width", y="sepal_length",
    color="species", size="petal_length",
    hover_data=["petal_width"],   # ホバー時に追加表示する列
)
fig.show()

折れ線グラフはpx.lineを使い、markers=Trueで各データ点にマーカーを付けられます。時系列データの推移を見るのに向きます。

import plotly.express as px

df = px.data.gapminder().query("country == 'Japan'")
fig = px.line(df, x="year", y="gdpPercap", markers=True)
fig.show()

ホバー時の表示内容は上のようにhover_dataで列を足すのが基本です。表示のオン・オフや書式を細かく変えたい場合はhovertemplateで制御します。

ガントチャートの作り方(px.timeline)

Plotlyはプロジェクトの工程表(ガントチャート)も描けます。かつてはfigure_factory.create_gantt()が使われていましたが、現在はcreate_ganttは非推奨で、バージョン4.9以降に追加されたpx.timelineを使うのが公式の推奨です。古い記事のコードをそのまま使うとこの点でつまずくため、新規に作るならpx.timelineを選びます。

import plotly.express as px
import pandas as pd

tasks = pd.DataFrame([
    dict(Task="要件定義", Start="2026-01-06", Finish="2026-01-17", Owner="企画"),
    dict(Task="設計",     Start="2026-01-20", Finish="2026-02-07", Owner="開発"),
    dict(Task="実装",     Start="2026-02-10", Finish="2026-03-13", Owner="開発"),
    dict(Task="テスト",   Start="2026-03-16", Finish="2026-03-27", Owner="QA"),
])
fig = px.timeline(tasks, x_start="Start", x_end="Finish", y="Task", color="Owner")
fig.update_yaxes(autorange="reversed")   # タスクを上から順に並べる
fig.show()

x_startx_endに開始・終了日を、yにタスク名を渡すだけで工程表になります。既定では下から並ぶため、update_yaxes(autorange="reversed")で上から時系列に並べ替えるのが定番の調整です。

PlotlyとMatplotlibの違いと使い分け

PythonのグラフといえばMatplotlibが定番ですが、Plotlyとは得意分野が異なります。両者は排他ではなく、目的で選ぶものです。

観点 Plotly Matplotlib
操作性 ズーム・ホバー標準対応 基本は静的画像
出力先 Webブラウザ・HTML PNG・PDF・SVG画像
記述量 px関数で1行 数行〜
3D・地図 標準サポート 追加ツールキットが必要
印刷・論文向け 可(別途書き出し) 得意
ライセンス MIT(無料) PSFベース(無料)

目安としては、データを触って探索する・Webで共有する・ダッシュボードに載せるならPlotly論文や資料の静的な図を高い品質で仕上げるならMatplotlibです。

Plotlyを選ぶべきでない場面

Plotlyにも不得手があります。次のケースでは無理にPlotlyを使わない方が結果的に速くなります。

  • 数万点を超える大量データの一括描画:ブラウザ側でDOM描画するため重くなりやすい。この場合はデータを間引くか、WebGL版のトレース(例:px.scatterrender_mode="webgl")を検討する。
  • そのまま印刷・投稿する静的な図:出版品質の細かな体裁調整はMatplotlibの方が実績と資料が多い。
  • 使い捨ての確認用グラフ:ブラウザを開くコストがかかるため、値をさっと見るだけなら静的ライブラリで十分。

逆に、他者に見せて操作してもらう前提なら、この後の作り込みはPlotlyの色(color)指定と使い方や、Webアプリ化するPython Dashに進むとスムーズです。

よくある質問(FAQ)

Plotlyの読み方は?

「プロットリー」と読みます。英語表記は Plotly で、社名・ライブラリ名として使われています。

Plotlyは無料で使えますか?

PythonライブラリのPlotlyはMITライセンスのオープンソースで、商用利用を含めて無料です。Dashも基本機能はオープンソースで無料で使えます(有料は運用向けの上位製品)。

plotly.expressとgraph_objectsはどちらを使うべき?

まず高レベルのplotly.expressを使い、二軸や種類の異なるサブプロット併置などpxで組みにくい構成のときだけplotly.graph_objectsに切り替えるのが実務的です。

ガントチャートはcreate_ganttで作りますか?

いいえ。figure_factory.create_gantt()は非推奨で、現在はpx.timelineを使います。開始日・終了日・タスク名を渡すだけで工程表になります。

BokehやDashとの違いは?

Bokehも同じくインタラクティブ可視化ライブラリで、大規模データのストリーミング表示などに強みがあります。DashはPlotlyのグラフを部品にしてデータ分析Webアプリを組むためのフレームワークで、単体グラフではなく画面全体を作りたいときに使います。

関連記事

資料請求

RELATED POSTS 関連記事