Skip to content
チュートリアル
Plotly
PlotlyとMatplotlib:データ可視化においてどちらが優れているか?

PlotlyとMatplotlib:データ可視化においてどちらが優れているか

データ可視化は、データ解析プロジェクトの重要な要素です。複雑なデータを理解しやすい視覚的な表現に変換する力を持っており、複雑なパターンやトレンドを素早く把握することができます。Pythonのエコシステムでは、データ可視化において2つのライブラリがトップに浮上しています。それが、PlotlyとMatplotlibです。この記事では、これら2つのライブラリを包括的に比較し、それぞれの特徴や強み、制約について探求していきます。また、どのライブラリが異なるデータ可視化のタスクに最適なのかについても考察します。

PlotlyとMatplotlibは、それぞれ強力な機能を持ちながらも、異なるタスクに適した異なる能力と特徴を提供しています。これらの違いを理解することは、データ可視化のニーズに適したツールを選択するために重要です。以下のセクションでは、これらのライブラリについて詳しく掘り下げ、例と比較を提供して、情報をもとに意思決定を支援します。

Plotlyとは?

Plotlyは、インタラクティブで高品質なグラフを提供するモダンなオープンソースのデータ可視化ライブラリです。Plotlyを使用すると、折れ線グラフ、棒グラフ、円グラフなどの基本的なグラフから、3Dグラフ、地理的なマップ、ヒートマップなどの複雑なグラフまで、さまざまな視覚化を作成することができます。Plotlyの特徴の1つは、そのインタラクティビティです。ユーザーは、データポイントにズームやパンをすることができるだけでなく、要素をクリックしてイベントをトリガーすることもできます。

Plotlyはまた、高いカスタマイズ性も持っており、色やレイアウト、フォントや軸など、ほぼすべてのチャートの側面を修正することができます。さらに、Plotlyは、PNG、JPEG、SVG、PDFなどのさまざまな形式をサポートしているため、Webアプリケーションや印刷メディアの両方に対して視覚化を作成するための多目的なツールとなっています。

以下は、Plotlyを使用して折れ線グラフを作成する簡単な例です:

import plotly.express as px
 
df = px.data.gapminder().query("country=='Canada'")
fig = px.line(df, x="year", y="lifeExp", title='カナダの平均寿命')
fig.show()

この例では、Plotly Expressで利用可能な「gapminder」データセットを使用し、カナダの平均寿命を年ごとに示す折れ線グラフを作成しています。

PlotlyはMatplotlibとどう違うのか?

Plotlyはインタラクティブでカスタマイズ可能な視覚化を提供することに重点を置いていますが、Matplotlibは異なるアプローチを取ります。Matplotlibは、Pythonで最も古く最も広く使用されているデータ可視化ライブラリの1つです。2Dおよび3Dの静的、アニメーション、インタラクティブなプロットの作成に多くのオプションを提供しています。

Matplotlibは、フィギュアのサイズ、dpi、テキストの位置、色、スタイルなど、図のすべての要素に対する柔軟性と制御性で知られています。また、Matplotlibは様々なハードコピー形式とインタラクティブ環境を横断した出版品質の図を生成する能力でも知られています。ただし、この柔軟性にはコストがかかります。MatplotlibのAPIは初心者には複雑で intimidating です。

一方、PlotlyのAPIは使いやすく直感的であり、視覚化の初心者やより直感的なアプローチを好む人々にとってはより良い選択肢となります。しかし、このシンプルさはMatplotlibと比較して達成できるカスタマイズのレベルを制限することがあります。

以下は、Matplotlibを使用して同様の折れ線グラフを作成する例です:

import matplotlib.pyplot as plt
import pandas as pd
 
## dfは前のPlotlyの例と同じデータを持つpandas DataFrameとします
df = pd.DataFrame({
    'year': [1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, 2002, 2007],
    'lifeExp': [68.75, 69.96, 71.30, 72.13, 72.88, 74.21, 75.76, 76.86, 77.95, 78.61, 79.77, 80.65]
})
 
plt.figure(figsize=(10, 5))
plt.plot(df['year'], df['lifeExp'])
plt.title('カナダの平均寿命')
plt.xlabel('年')
plt.ylabel('平均寿命')
plt.grid(True)
plt.show()

この例では、カナダの平均寿命を年ごとに示す折れ線グラフを作成していますが、先ほどのPlotlyの例と同様に、コードがやや冗長で、より手動の設定を必要としていることがわかります。

データ可視化におけるより優れたライブラリはPlotlyとMatplotlibのどちらか?

データ可視化においてどのライブラリが「優れている」と判断するかは、特定のニーズとユーザーの好みに大きく依存します。PlotlyとMatplotlibの両方にはそれぞれ強みがあり、異なるタイプのタスクに効果的に使われることがあります。

Plotlyは、インタラクティブでWebベースの視覚化を作成する際に優れたパフォーマンスを発揮します。その使いやすいAPIと高いカスタマイズ性により、Webアプリケーション向けの魅力的でインタラクティブなチャートを作成するのに適した選択肢となります。さらに、Plotlyは大規模なデータセットを効率的に処理できる能力とさまざまなエクスポート形式のサポートを持っているため、データの探索およびプレゼンテーションの両方に対して多機能なツールとなっています。

一方、Matplotlibは、高い精度で静的で複雑なプロットを作成するのに優れています。図のすべての側面にわたる包括的なAPIと細かい制御機能により、出版品質の視覚化を作成するための主要なライブラリとなっています。さらに、Matplotlibの多様なプロットタイプのサポートと、NumPyやPandasなどの他のPythonライブラリとの統合もあり、科学的な計算や技術的なアプリケーションにおいて強力なツールとなっています。

MatplotlibとPlotly以外の別の選択肢:PyGWalker

**PyGWalker(発音:ピッグウォーカー)**は、「Python binding of Graphic Walker」の奇妙なかばん語です。これは、Jupyter Notebook(または他のJupyterベースのノートブック)とGraphic Walker (opens in a new tab)を組み合わせています。データサイエンティストは、Pythonのコードを使用せずに、直感的なドラッグアンドドロップを使用してデータの視覚化を構築することができます!

PyGWalkerは、次の場所ですぐに試すことができます:Google Colab (opens in a new tab)Kaggle Code (opens in a new tab)Binder (opens in a new tab)、またはGraphic Walker Online Demo (opens in a new tab)

以下はPyGWalkerをすばやく始める方法です:

PyGWalkerのセットアップ

始める前に、pipまたはcondaを使用して必要なパッケージをコマンドラインでインストールしてください。 Pipを使用する場合: PyGWalkerをインストールするには、次のコマンドを実行します。

pip install pygwalker

最新リリースとバージョンを最新に保つ場合は、次のコマンドを試してみてください。

pip install pygwalker --upgrade

また、次のコマンドを使用して、最新の機能とバグ修正を取得できます。

pip install pygwalker --upgrade --pre

Conda-forgeを使用する場合:

conda-forgeを介してPyGWalkerをインストールするには、次のいずれかのコマンドを実行します。

conda install -c conda-forge pygwalker

または

mamba install -c conda-forge pygwalker

詳細なヘルプについては、conda-forgeのフィードストックをチェックしてください。

PyGWalkerを実行する

PyGWalkerがインストールされている場合、Jupyter NotebookでpandasとPyGWalkerをインポートして使用できます。

import pandas as pd
import pygwalker as pyg

PyGWalkerは既存のワークフローにスムーズに統合されます。たとえば、データフレームでGraphic Walkerを呼び出すには、pandasを使用してデータをロードし、次に次のように実行します。

df = pd.read_csv('./bike_sharing_dc.csv', parse_dates=['date'])
gwalker = pyg.walk(df)

polars(バージョンpygwalker>=0.1.4.7a0以上)を使用している場合は、次のようにPyGWalkerを使用できます。

import polars as pl
df = pl.read_csv('./bike_sharing_dc.csv',try_parse_dates = True)
gwalker = pyg.walk(df)

さらに柔軟性を持たせるために、Binder (opens in a new tab)Google Colab (opens in a new tab)、またはKaggle Code (opens in a new tab)を介してオンラインでPyGWalkerを試すこともできます。

以上です。これで、ドラッグアンドドロップで変数を操作してデータを分析および視覚化するためのTableauのようなユーザーインターフェイスを持つようになりました。

TableauのようなUIを備えたPyGWalker

どちらのライブラリを使用するにしても制限はありますか?

PlotlyとMatplotlibのいずれのツールにも、制限があります。Plotlyの制限の1つは、大規模なデータセットでのパフォーマンスです。Plotlyは、他の多くの視覚化ライブラリよりも効率的に大規模なデータセットを扱うことができますが、非常に大規模なデータセットや複雑な視覚化には苦労することがあり、レンダリング時間が遅くなる可能性があります。

Plotlyのもう一つの制約は、レンダリングにJavaScriptを必要としていることです。これは、ユーザーがPlotlyの視覚化を表示するためにブラウザでJavaScriptを有効にする必要があることを意味します。これはほとんどの最新のWebブラウザには問題ありませんが、古いブラウザを使用しているユーザーやセキュリティ上の理由でJavaScriptを無効にしているユーザーには問題が発生する可能性があります。

一方、Matplotlibは包括的かつ複雑なAPIにより、学習曲線が急です。これにより、ユーザーは自分の視覚化に高度な制御を持つ一方で、初心者がライブラリを使い始めるのが難しくなることもあります。また、Matplotlibの静的で複雑なプロットに焦点を当てたアプローチのため、Plotlyのようなインタラクティブな機能が欠けているので、WebベースのアプリケーションにおいてPlotlyが魅力的なものになっています。

PlotlyとMatplotlibを一緒に使用できますか?

はい、PlotlyとMatplotlibは同じプロジェクトで一緒に使用することができます。実際、Plotlyは plotly.tools.mpl_to_plotly 関数を使用してMatplotlibの図をインタラクティブなPlotlyの図に変換することさえできます。これにより、Matplotlibの複雑な静的プロットとPlotlyのインタラクティブなWebベースの視覚化の両方の利点を活用することができます。

以下は、Matplotlibの図をPlotlyの図に変換する方法の例です:

import matplotlib.pyplot as plt
import plotly.tools as tls
 
## 単純なMatplotlibの図を作成する
plt.figure()
plt.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
 
## 図をPlotlyの図に変換する
plotly_fig = tls.mpl_to_plotly(plt.gcf())
plotly_fig.show()

この例では、まずMatplotlibを使用して単純な折れ線グラフを作成します。次に、 plotly.tools モジュールのmpl_to_plotly 関数を使用してこの図をPlotlyの図に変換します。変換された図は、元のMatplotlibの図の外観と感触を保持したインタラクティブなPlotlyの図です。

PlotlyとMatplotlibを他のライブラリと比較する

PlotlyとMatplotlibはPythonで最も人気のあるデータ視覚化ライブラリの2つですが、これら以外にも多くの異なる機能と機能を提供するライブラリがあります。そのようなライブラリの1つがSeabornです。これはMatplotlibをベースに構築され、魅力的な統計グラフィックスを作成するための高レベルインターフェイスを提供します。

Seabornは、numpyやpandasのデータ構造やscipyやstatsmodelsの統計的ルーチンのサポートを含むPyDataスタックとよく統合しています。また、matplotlibグラフィックスのスタイリングのための組み込みのテーマも備えています。SeabornはPlotlyほどのインタラクティブ機能は提供しませんが、より少ないコードで複雑な統計的な視覚化を作成することに優れています。

結論

結論として、PlotlyとMatplotlibの両方はPythonでのデータの視覚化において強力なツールです。どちらを選ぶかは、プロジェクトの具体的なニーズと個人の好みによります。各ライブラリの強みと制約を理解することで、情報を得た判断を下し、ニーズに最適なツールを選択することができます。ウェブアプリケーション用の単純な折れ線グラフから科学論文用の複雑な3Dプロットまで、必要に応じたPythonライブラリがあります。

よくある質問

  1. PlotlyとMatplotlibの主な違いは何ですか? Plotlyはインタラクティブなプロットとユーザーフレンドリーなインターフェースで知られています。一方、Matplotlibは図のあらゆる要素に対する柔軟性と制御性で知られています。Plotlyは一般的にウェブベースやインタラクティブな視覚化に向いており、Matplotlibは高精度な静的で複雑なプロットの作成に向いています。

  2. PlotlyとMatplotlibを一緒に使用することはできますか? はい、PlotlyとMatplotlibは同じプロジェクトで一緒に使用することができます。Plotlyは、plotly.tools.mpl_to_plotly関数を使用してMatplotlibの図をインタラクティブなPlotlyの図に変換することさえできます。

  3. PlotlyとMatplotlibの制約はどのようなものですか? Plotlyは非常に大きなデータセットや複雑な視覚化に苦労することがあり、視覚化のレンダリングにJavaScriptが必要です。一方、Matplotlibは包括的で複雑なAPIにより、学習コストが高くなる傾向があります。