Pythonでデータ可視化を行う際、Plotlyはインタラクティブなグラフが作成できる強力なライブラリです。そのPlotlyには、主に plotly.graph_objects (go)
と plotly.express (px)
の2つの方法でグラフを作成するアプローチがあります。しかし、「どちらを使えばいいの?」と迷う方も多いのではないでしょうか?
この記事では、go
と px
の違いを詳しく解説し、それぞれの使いどころを具体的なPythonコードを交えて説明します。
目次
Plotlyのgo (plotly.graph_objects
) とは?
plotly.graph_objects
(略して go
)は、細かくカスタマイズしたい場合に適した方法 です。
基本的に go.Figure
オブジェクトを作成し、グラフの各要素(トレースやレイアウトなど)を手動で指定する 必要があります。
goを使うメリット
- 詳細なカスタマイズが可能(軸、凡例、アニメーションなど)
- 複数のトレース(系列)を組み合わせやすい
- データの更新やインタラクティブ性を高めやすい
goを使うデメリット
- コードが長くなりがち
- 初心者にはやや扱いにくい
goの基本的な使い方(棒グラフ)
例えば、売上データを棒グラフで表示する場合、go
を使うと以下のようなコードになります。
import plotly.graph_objects as go
# データ
categories = ["1月", "2月", "3月", "4月"]
sales = [300, 400, 350, 500]
# Figureオブジェクトを作成
fig = go.Figure()
# 棒グラフを追加
fig.add_trace(go.Bar(x=categories, y=sales, name="売上"))
# レイアウトのカスタマイズ
fig.update_layout(
title="月別売上",
xaxis_title="月",
yaxis_title="売上 (万円)",
template="plotly_white"
)
# グラフを表示
fig.show()

このコードでは、go.Figure()
を作成し、add_trace()
で 棒グラフのデータを追加 しています。
さらに update_layout()
を使って、タイトルや軸のラベルを設定しています。
Plotlyのpx (plotly.express
) とは?
plotly.express
(略して px
)は、シンプルなコードで簡単にグラフを作成できる 方法です。px
では 1行でデータフレームからグラフを作成できる のが最大の特徴です。
pxを使うメリット
- コードが短く、直感的に書ける
- データフレームと親和性が高い
- カラーマッピングやアニメーションが簡単
pxを使うデメリット
- 詳細なカスタマイズは難しい
- 複数のトレース(系列)を扱うのがやや面倒
pxの基本的な使い方(棒グラフ)
同じ売上データを px
で表現すると、以下のようになります。
import plotly.express as px
import pandas as pd
# データをPandasのDataFrameで用意
df = pd.DataFrame({"月": ["1月", "2月", "3月", "4月"], "売上": [300, 400, 350, 500]})
# pxで棒グラフを作成(1行で完結)
fig = px.bar(df, x="月", y="売上", title="月別売上", labels={"売上": "売上 (万円)"}, template="plotly_white")
# グラフを表示
fig.show()

このように、たった 1行 で go
で作成したのとほぼ同じグラフが完成します。px.bar()
で データフレームをそのまま指定 できるのが px
の強みです。
goとpxの比較まとめ
比較項目 | go (graph_objects ) | px (express ) |
---|---|---|
コード量 | 多い(細かく書く必要あり) | 少ない(1行でグラフが作れる) |
カスタマイズ性 | 高い(細かい調整が可能) | 低め(基本設定のみ) |
複数データの扱いやすさ | 扱いやすい | やや難しい |
データフレームとの相性 | 普通(手動でデータを設定) | 高い(Pandasと連携しやすい) |
初心者向け | 難しい | 簡単 |
goとpxの使い分け
「どちらを使えばいいの?」と迷った場合、以下の基準で選ぶと良いでしょう。
✅ シンプルなグラフを素早く作りたい → px
(plotly.express)
- データフレームをそのまま使いたい
- コードを短く書きたい
- 軽くデータを可視化するだけならOK
✅ 細かくカスタマイズしたい → go
(plotly.graph_objects)
- 軸の設定や凡例の調整をしたい
- 複数のデータセットを組み合わせたい
- インタラクティブな操作を作り込みたい
例えば、データの探索(EDA)をサクッとしたいなら px
を使い、ダッシュボードの本番環境では go
を使う、という使い分けもよくあります。
具体的なシナリオで比較
📊 シナリオ1:1つの折れ線グラフを作る
例えば、2024年の売上推移を可視化するとします。
✅ px
なら1行で完結
df = pd.DataFrame({"月": ["1月", "2月", "3月", "4月"], "売上": [300, 400, 350, 500]})
fig = px.line(df, x="月", y="売上", title="2024年 売上推移")
fig.show()

✅ go
なら詳細設定が可能
fig = go.Figure()
fig.add_trace(go.Scatter(x=["1月", "2月", "3月", "4月"], y=[300, 400, 350, 500], mode="lines+markers", name="売上"))
fig.update_layout(title="2024年 売上推移", xaxis_title="月", yaxis_title="売上 (万円)")
fig.show()

📈 シナリオ2:2つの系列を比較する
例えば、「売上」と「利益」の2つのデータを1つのグラフで表示したい場合。
✅ go
なら簡単に2系列を追加できる
fig = go.Figure()
fig.add_trace(go.Scatter(x=categories, y=sales, mode="lines", name="売上"))
fig.add_trace(go.Scatter(x=categories, y=[100, 200, 150, 300], mode="lines", name="利益"))
fig.show()

✅ px
だとデータを整形する必要がある
df = pd.DataFrame({"月": ["1月", "2月", "3月", "4月"], "売上": sales, "利益": [100, 200, 150, 300]})
df_melted = df.melt(id_vars=["月"], var_name="指標", value_name="値")
fig = px.line(df_melted, x="月", y="値", color="指標", title="売上と利益")
fig.show()

まとめ
px
はシンプルで使いやすいgo
はカスタマイズ性が高い- データ分析なら
px
、本格的な可視化ならgo
どちらも便利なので、用途に応じて適切に使い分けましょう!