Pythonでインタラクティブなグラフを作ることができる「Plotly」。
Plotlyには、ExpressとGraph Objectsの2つの使い方があるのをご存知でしょうか?
この2つはどちらも同じように可視化が可能ですが、実は使い方や特徴に違いがあります。
本記事では、それぞれの違いや特徴、メリット・デメリットを簡単な例も交えて紹介し、「どちらをいつ使うべきか?」について、解説していきます。
Plotly Express(px)とは
Plotly Express は、シンプルで直感的にグラフを作れる高レベルAPI(=提供される機能が大雑把で簡単に使えるAPI)です。
折れ線グラフや棒グラフなど、グラフの種類ごとに関数が用意されており、コードもシンプルでわかりやすいため、初心者でも簡単にグラフの作成が可能です。
一方、カスタマイズの自由度は限定的であり、複数軸やサブプロット(複数のグラフを1ページに並べる)などの複雑な構成も苦手としています。
コード例(折れ線グラフ)
import pandas as pd
import plotly.express as px
# サンプルデータの作成
df = pd.DataFrame({
'日付': pd.date_range(start='2025-01-01', periods=7),
'売上': [100, 150, 130, 170, 200, 220, 210]
})
# 折れ線グラフの作成
fig = px.line(df, x='日付', y='売上', title='日別売上の推移')
fig.show()
Pythonシンプルな折れ線グラフを作成する例ですが、グラフの作成自体に必要なコードはわずか2行と、非常に簡単に作成できることがわかります。
Plotly Graph Objects(go)とは
Plotly Graph Objects は、低レベルAPI(=提供される機能が細かく、詳細な設定が必要なAPI)で、細かいカスタマイズに対応したグラフ作成が可能です。
そのため、pxが苦手とする細部のこだわりや複雑な構成にも対応しています。
一方、グラフの要素(トレースやレイアウトなど)を記述していく必要があることから、単純なグラフでもコード量が多くなる傾向があるため、やや学習コストが高いと言えるでしょう。
コード例(折れ線グラフ)
import plotly.graph_objects as go
# 折れ線グラフの作成
fig = go.Figure()
fig.add_trace(
go.Scatter(
x=df['日付'],
y=df['売上'],
mode='lines+markers',
marker_symbol='diamond',
marker_size=10,
name='売上',
)
)
fig.update_layout(
title='日別売上の推移(goで作成)',
xaxis_title='日付',
yaxis_title='売上金額',
template='plotly_white',
)
fig.show()
Python表示内容を1つずつ設定する分、コードが多くなっていますが、細かなコントロールまで可能です。
どのように使い分けるべきか?
それぞれの特徴を踏まえ、px・goの使い分けについて、おすすめのシチュエーションを整理しました。
- pxがおすすめのシチュエーション:
- はじめてPlotlyを使用する場合
- 時間をかけずにサクッとデータを可視化したい場合
- シンプルなデータを扱う場合
- goがおすすめのシチュエーション:
- 複雑な構成を扱いたい場合
- グラフの細部(色やラベル、注釈など)を調整したい場合
- 納品物など本格的なグラフを作成したい場合
私の場合はとりあえずデータを可視化したいときや、EDA(探索的データ分析)を行うときなどにpx、ダッシュボードや細部にこだわったグラフを作成するときはgoを使用するなどの使い分けをしています。
まとめ
今回はPlotlyの2つの使い方について解説しました。
Plotly ExpressとGraph Objectsの違いを改めてまとめると、以下の通りとなります。

はじめのうちは、どちらを使えばいいか迷うこともありますが、どちらのアプローチも自由に選べることはPlotlyの強みでもあります。
自分のスタイルや目的に合わせて使い分け、Plotlyをうまく活用してください!