Excel で Python を使用してプロットとグラフを作成する

適用先
Excel for Microsoft 365 Excel for Microsoft 365 for Mac

可用性の情報については、「 Excel の Python の可用性」を参照してください。 Excel で Python に関する問題が発生した場合は、Excel で [ヘルプ>Feedback ] を選択して報告してください。

Python in Excel を初めて使用する場合は、 「 Excel での Python の概要 」と「Excel での Python の概要」から始めます

オープンソースの Python ライブラリを使用してプロットとグラフを作成する

Excel の Python には、 Anaconda によって提供される Python ライブラリのコア セットが付属しています。 この記事では、seaborn や Matplotlib などの Python ライブラリを使用してプロットとグラフを作成する方法について説明します。 Python in Excel で使用できるオープン ソース ライブラリの詳細については、「オープンソース ライブラリと Python in Excel」を参照してください。

この記事の例では、アヤメの花データ セットを使用します。 このサンプル ブックをダウンロードして、「 python-in-excel-iris-dataset.xlsx」という記事に従います。

Seaborn を使用してペア プロットを作成する

この例では、アヤメの花データ セットのペア プロットの視覚化を作成する方法を示します。 ペア プロットは、データ セット内の各変数間のリレーションシップを比較するプロットとグラフのマトリックスです。 この場合、アヤメの花データ セットには、sepal_lengthsepal_widthpetal_lengthpetal_width の 4 つの数値データ列が含まれます。

Seaborn ライブラリを使用して、Python in Excel でペア プロットを作成します。

Excel の Python は 、シーボーン ライブラリを使用して視覚化を作成します。 seaborn ライブラリは、次の import ステートメントを使用して Excel の Python 用に自動的にインポートされ、エイリアス sns で参照 できます

import seaborn as sns

Seaborn ライブラリを使用してアヤメの花データ セットのペア プロットを作成するには、次の手順を実行します。

  1. Python in Excel セルに次のコード スニペットを入力します。 このコード スニペットには、ペア プロットが pairplot と呼ばれる変数として格納されます。 これは、シーボーンライブラリエイリアス sns とシーボーン関数ペアプロットを使用して ペアプロットを作成します。

    pairplot = sns.pairplot(xl("Table1[#All]", headers=True))

    pairplot 関数の引数として、コード スニペットはカスタム Python 関数 xl() を使用し、ワークシートの最初のテーブル Table1 を参照します。 これには、テーブルの内容全体 ([#All] として) が含まれています。また、テーブルにはヘッダー行 (headers=True として) が含まれていることに注意してください。 この例では、ワークシート内の Table1 にアヤメの花データ セットが含まれています。

    DataFrame でペア プロットのプレビューを確認します。

    エラーが発生した場合は、「Python in Excel エラーのトラブルシューティング」を参照してください。

  2. Python 式をコミットした後、Python in Excel は、画像オブジェクト内のペア プロットの視覚化を返します。 画像オブジェクト セル内のカード アイコンを選択して、視覚化のプレビューを表示します。

    DataFrame カードでプロットのプレビューを確認します。

  3. 視覚化を画像オブジェクトとして保持し、Python の計算に引き続き使用します。 画像を Excel グリッドに抽出し、サイズを変更し、各プロットをより詳細に表示します。 グリッドに画像を抽出するには、イメージ オブジェクトを含むセルを右クリックまたは Ctrl キーを押しながらクリックし、メニューから [ セルの上にプロットを表示 ] を選択します。

    画像オブジェクトの抽出の詳細については、この記事の「Excel グリッドに画像オブジェクトを抽出する」セクションを参照してください。

Matplotlib を使用して散布図を作成する

この例では、アヤメの花のサンプル データ セットを使用して散布図を作成する方法について説明します。 散布図には、データ セット内の 2 つの数値変数間のリレーションシップが示されます。 この例では、次のスクリーンショットのような散布図を作成し、 sepal_widthsepal_length の値を比較します。

matplotlib ライブラリを使用して、Python in Excel で散布図を作成します。

Excel の Python では、 Matplotlib オープンソース ライブラリを使用して視覚化が作成されます。 Matplotlib ライブラリは、次の import ステートメントを使用して Excel の Python 用に自動的にインポートされ、 plt として参照できます。

import matplotlib.pyplot as plt

Matplotlib ライブラリを使用してアヤメの花データ セットの散布図を作成するには、次の手順を実行します。

  1. Excel の Python セルで、Matplotlib 散布図 関数を使用し、引数として Iris データ セットの sepal_length 列と sepal_width 列を入力します。 この例では、ワークシート内の Table1 にアヤメの花データ セットが含まれています。

    plt.scatter(xl("Table1[sepal_length]"), xl("Table1[sepal_width]"))

  2. 散布図にラベルとタイトルを追加します。

    # Label the x and y axes of the plot.
    plt.xlabel('sepal_length')
    plt.ylabel('sepal_width')

    # Add a title to the plot.
    plt.title('Sepal length and width analysis')

    このコード スニペットは、前の手順の同じ Excel セル内で Python 式の後に追加のコード行として追加することも、ブック内の新しい Python in Excel セルに入力することもできます。 新しいセルに入力することを選択する場合は、行優先の計算順序ルールに従い、最初のセルの後に入力してください。

  3. Python 式をコミットした後、Python in Excel は、散布図の視覚化を画像オブジェクトとして返します。 画像オブジェクト セル内のカード アイコンを選択して、視覚化のプレビューを表示します。

    DataFrame で散布図のプレビューを表示します。

    エラーが発生した場合は、「Python in Excel エラーのトラブルシューティング」を参照してください。

  4. 視覚化を画像オブジェクトとして保持し、Python の計算に引き続き使用します。 画像を Excel グリッドに抽出してサイズを変更し、散布図をより詳細に表示します。 グリッドに画像を抽出するには、画像オブジェクトが含まれるセルを右クリックするか Ctrl キーを押しながらクリックし、メニューから [セルの上にプロットを表示] を選択します。

    画像オブジェクトの抽出の詳細については、この記事の「Excel グリッドに画像オブジェクトを抽出する」セクションを参照してください。

Excel グリッドに画像オブジェクトを抽出する

この記事の例で示すように、Seaborn や Matplotlib などの Python ライブラリは、Excel セルにデータの視覚化を返すことができます。 既定では、Python in Excel は、これらの視覚化を画像オブジェクトとして返します。

画像オブジェクト セル内のカード アイコンを選択して、視覚化のプレビューを表示します。

DataFrame カードでプロットのプレビューを確認します。

Excel グリッドに画像を抽出するには、2 つの方法があります。すなわち、画像をセル上のプロットとして表示するか、セル内に画像を表示します。

セルの上に画像を表示する

次の手順に従い、画像をセルの上のプロットとして表示します。

  1. 画像オブジェクトが含まれるセルを右クリックするか Ctrl キーを押しながらクリックし、メニューから [セルの上にプロットを表示] を選択します (または、キーボード ショートカット Ctrl + Alt + Shift + C キーを使用します)。 これにより、Excel グリッド上に浮かび、簡単にサイズ変更できる画像のコピーが作成されます。 元の画像オブジェクトは元のセル内に残ります。

  2. プロット画像を選択してドラッグし、ワークシートの周囲に移動します。 画像の角と辺にあるノードを選択してドラッグし、サイズを変更します。

    [参照の作成] アイコンを使用してフローティング プロットの視覚エフェクトを作成します。

セル内に画像を表示する

セル内に画像を表示するには、次の手順に従います。

  1. 画像オブジェクトを Excel 値として返します。 画像オブジェクトのセルを選択し、数式バー内の [Python 出力] メニューに移動し、[Excel 値] を選択します。

    出力の種類を変更するには、数式バーの横にある Python 出力メニューを使用します。

    プロット画像がセル内に表示されるようになりました。

    ヒント

    Python オブジェクトと Excel 値の間で Python 式の結果を切り替えるには、キーボード ショートカット Ctrl + Alt + Shift + M を使用します。 キーボード ショートカットの詳細については、「Excel キーボード ショートカットの Python」を参照してください。

  2. プロット画像のサイズは、セルのサイズによって異なります。 セルのサイズを大きくするか、セルをマージして、イメージのサイズ 大きくします。

英語以外の言語に異なるフォントを使用する

中国語、韓国語、タイ語など、ラテン以外のアルファベット文字を使用するデータをグラフ化するには、 excel.FontPathを使用します。 既定では、Python in Excel では、ラテン語以外のアルファベット文字が空の四角形 ('□') としてレンダリングされます。 これを解決するために、 excel.FontPath では、 excel モジュールを使用して別のフォントを呼び出し、文字をレンダリングできます。

次のフォントを使用できます。 属性は、Python コードの excel.FontPath に追加されます。 このパスは、この属性によって呼び出されたフォント ファイルを参照します。

属性 パス
BENGALI /usr/share/fonts/Vrinda.ttf
簡体中国語 /usr/share/fonts/SimSun.ttf
繁体中国語 /usr/share/fonts/MingLiU.ttf
HINDI /usr/share/fonts/Mangal.ttf
JAPANESE /usr/share/fonts/Meiryo.ttf
KOREAN /usr/share/fonts/Batang.ttf
THAI /usr/share/fonts/THSarabunPSK.ttf

excel を使用します。簡体字中国語プロット ラベルを表示する FontPath

次のスクリーンショットは、 excel.FontPathを使用して簡体字中国語でラベルをプロットするグラフを示しています。 スクリーンショットの後のコード サンプルは、 excel.FontPath.CHINESE_SIMPLIFIED を使用して簡体字中国語ライブラリの文字を表示する方法を示しています。

文字が正しくレンダリングされたグラフ

excel.FontPath を使用したサンプル コード

このコード サンプルでは、 excel.FontPath.CHINESE_SIMPLIFIED を使用して、前のスクリーンショットに表示されているプロット ラベルにプロットと簡体字中国語の文字を生成する方法を示します。

-

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# Set the font path. This returns '/usr/share/fonts/simsun.ttf'.
font_path = excel.FontPath.CHINESE_SIMPLIFIED

# Point the properties to the font path.
font_properties = FontProperties(fname=font_path)
plt.rcParams['font.family'] = font_properties.get_name()

# Make the plot.
myplot = pd.DataFrame({'欧文': [1,2,3], '比尔': [1,2,3]}).plot(x='欧文')

# Show the plot.
plt.show()