Plotly 徹底解説: Pythonでインタラクティブなグラフを簡単作成!
データ分析や機械学習において、データの可視化は非常に重要です。静的なグラフでは伝えきれない情報の多さや、ユーザーが自由にデータを探索できるインタラクティブな体験を求めるなら、Plotlyが最適解です。
この記事では、PythonでPlotlyを使って美しいインタラクティブなグラフを作成する方法を、基本的な使い方から応用まで徹底的に解説します。
Plotlyってどんなもの?
Plotlyは、Python、R、JavaScriptなどで利用できるオープンソースのグラフ描画ライブラリです。特にPython版のPlotlyは、データサイエンス分野で絶大な人気を誇ります。
Plotlyの最大の特徴は、作成されるグラフが単なる画像ではなく、ブラウザ上で拡大・縮小、パン(移動)、ホバー時の情報表示、データのフィルタリングなどが可能なインタラクティブなグラフである点です。これにより、データの探索や分析がより深く、直感的に行えるようになります。
なぜPlotlyを選ぶべきか?
数あるグラフ描画ライブラリの中でPlotlyを選ぶメリットは多岐にわたります。
-
インタラクティブ性: これがPlotlyの最大の強みです。Webブラウザ上で動作するため、ユーザーがグラフを直接操作し、詳細な情報を確認できます。
-
豊富なグラフ種類: 散布図、折れ線グラフ、棒グラフ、ヒストグラム、箱ひげ図、円グラフ、ヒートマップ、3Dグラフ、地図など、非常に多岐にわたるグラフタイプをサポートしています。
-
高品質なビジュアル: デフォルト設定でも美しく、プロフェッショナルな見た目のグラフを生成します。
-
ダッシュボードへの組み込み: DashなどのWebアプリケーションフレームワークと組み合わせることで、インタラクティブなダッシュボードを簡単に構築できます。
-
オフライン動作: インターネット接続なしでもインタラクティブなグラフを生成し、HTMLファイルとして保存できます。
-
Pythonとの親和性: NumPy、PandasといったPythonの主要なデータ分析ライブラリと非常に高い親和性を持ちます。
Plotlyを始めるための準備
1. インストール
Plotlyはpipで簡単にインストールできます。
pip install plotly pandas # pandasもよく一緒に使うためインストールを推奨
Plotlyの基本的な使い方
Plotlyには、主に2つのAPIスタイルがあります。
-
Plotly Express: 高レベルAPI。Pandas DataFrameと相性が良く、少ないコードで素早くグラフを作成できます。
-
graph_objects: 低レベルAPI。より詳細なカスタマイズが可能で、複雑なグラフを作成する際に使用します。
まずは、Plotly Expressを使った簡単なグラフ作成の例を見ていきましょう。
最小限のサンプルプログラム (Plotly Express)
import plotly.express as px
import pandas as pd
# データ準備 (Pandas DataFrame)
df = pd.DataFrame({
"Fruit": ["Apple", "Orange", "Banana", "Apple", "Orange"],
"Amount": [4, 1, 2, 2, 4],
"City": ["Tokyo", "Tokyo", "Osaka", "Nagoya", "Osaka"]
})
# 1. 棒グラフの作成
fig_bar = px.bar(df, x="Fruit", y="Amount", color="City", title="フルーツの販売量 (都市別)")
fig_bar.show() # グラフをブラウザで表示
# 2. 散布図の作成
df_scatter = pd.DataFrame({
"X_data": [1, 2, 3, 4, 5],
"Y_data": [2, 4, 1, 5, 3],
"Category": ["A", "B", "A", "B", "A"]
})
fig_scatter = px.scatter(df_scatter, x="X_data", y="Y_data", color="Category", title="散布図の例")
fig_scatter.show() # グラフをブラウザで表示
このコードを実行すると、棒グラフと散布図がそれぞれブラウザの新しいタブでインタラクティブに表示されます。マウスカーソルを合わせると詳細情報が表示されたり、ツールバーで操作できるのが確認できるはずです。
Plotly graph_objectsの基本的な使い方
より細かい設定や複雑なグラフ構造を制御したい場合は、plotly.graph_objectsを使用します。
graph_objectsを使ったサンプルプログラム
import plotly.graph_objects as go
# データ準備
x_data = [1, 2, 3, 4, 5]
y_data = [10, 11, 8, 12, 9]
# 1. 折れ線グラフの作成
fig_go = go.Figure(
data=[go.Scatter(x=x_data, y=y_data, mode='lines+markers', name='データA')],
layout=go.Layout(
title=go.layout.Title(text="Plotly goによる折れ線グラフ"),
xaxis=dict(title='X軸ラベル'),
yaxis=dict(title='Y軸ラベル')
)
)
fig_go.show()
graph_objectsでは、go.Figure()で全体のFigureオブジェクトを作成し、dataにはプロットしたいトレース(グラフの種類とデータ)をリストで、layoutにはタイトル、軸のラベル、凡例などのレイアウト情報を辞書形式で設定します。
Plotlyの便利な機能とカスタマイズ
1. グラフの保存
作成したインタラクティブなグラフは、HTMLファイルとして保存できます。これにより、インターネット接続がない環境でもインタラクティブなグラフを共有できます。
# 上記で作成した fig_bar を例に
fig_bar.write_html("sales_bar_chart.html")
2. 複数のグラフの組み合わせ (サブプロット)
make_subplots関数を使うと、一つのFigure内に複数のグラフを並べて表示できます。
from plotly.subplots import make_subplots
fig_multi = make_subplots(rows=1, cols=2, subplot_titles=("散布図", "棒グラフ"))
# 散布図を追加
fig_multi.add_trace(go.Scatter(x=[1,2,3], y=[4,5,6], mode="markers"), row=1, col=1)
# 棒グラフを追加
fig_multi.add_trace(go.Bar(x=["A","B","C"], y=[10,15,12]), row=1, col=2)
fig_multi.update_layout(title_text="複数のグラフを並べて表示")
fig_multi.show()
3. スタイルとレイアウトのカスタマイズ
色、フォント、軸の範囲、タイトル、凡例など、グラフのあらゆる要素を細かくカスタマイズできます。
import plotly.express as px
import pandas as pd
df = pd.DataFrame({"X": [1,2,3], "Y": [4,1,2], "Z": [7,8,9]})
fig = px.scatter(df, x="X", y="Y", size="Z", color="Z", title="カスタマイズ例")
fig.update_layout(
font_family="Arial",
font_color="blue",
title_font_size=24,
xaxis_title_font_size=18,
yaxis_title_font_size=18,
plot_bgcolor='lightgray', # プロットエリアの背景色
paper_bgcolor='lightblue', # グラフ全体の背景色
hovermode="closest" # ホバー時の挙動
)
fig.show()
まとめ
この記事では、Pythonでインタラクティブなグラフを簡単に作成できるPlotlyについて、その魅力、インストール方法、Plotly Expressとgraph_objectsを使った基本的なグラフ作成、そして便利なカスタマイズ機能までを徹底的に解説しました。
Plotlyを使いこなすことで、あなたのデータ分析やレポート作成がより魅力的で、洞察に富んだものになるでしょう。ぜひ、Plotlyを使って、静的なグラフでは伝えきれない「動きのあるデータ」を表現してみてください!
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座


