Excel で Python を使用してプロットとグラフを作成する
Applies To
Excel for Microsoft 365Excel の Python は、バージョン 2408 (ビルド 17928.20114) 以降、および Windows 上の月次エンタープライズ チャネル (バージョン 2408 (ビルド 17928.20216) 以降、Windows で現在のチャネルを実行している Enterprise ユーザーと Business ユーザーが使用できるようになりました。バージョン 2405 (ビルド 17628.20164) 以降の Windows で現在のチャネルを実行しているファミリー ユーザーと個人ユーザーはプレビュー段階で利用できます。 Excel の Python は、 Microsoft 365 Insider Program を通じて現在のチャネル (プレビュー) を実行している Education ユーザー向けにプレビューで利用できます。 現在、Semi-Annual エンタープライズ チャネルでは使用できません。
最初に Excel for Windows に展開し、後で他のプラットフォームにロールアウトします。 可用性の詳細については、「 Excel の Python の可用性」を参照してください。
Excel で Python に関する問題が発生した場合は、Excel の [ヘルプ ] > [フィードバック ] を選択して報告してください。
Python in Excel を初めて使用する場合は、 「 Excel での Python の概要 」と「Excel での Python の概要」から始めます。
オープンソースの Python ライブラリを使用してプロットとグラフを作成する
Excel の Python には、 Anaconda によって提供される Python ライブラリのコア セットが付属しています。 この記事では、seaborn Matplotlib などの Python ライブラリを使用してプロットとグラフを作成する方法について説明します。 Excel で Python で使用できるオープン ソース ライブラリの詳細については、「Excel の オープンソース ライブラリと Python」を参照してください。
この記事の例では、Iris フラワー データ セットを使用します。 このサンプル ブックをダウンロードして、「 python-in-excel-iris-dataset.xlsx」という記事に従います。
シーボーンを使用してペア プロットを作成する
この例では、Iris フラワー データ セットのペア プロット視覚化を作成する方法を示します。 ペア プロットは、データ セット内の各変数間のリレーションシップを比較するプロットとグラフのマトリックスです。 この場合、Iris フラワー データ セットには、sepal_length、sepal_width、petal_length、petal_widthの 4 つの数値データ列が含まれます。
Excel の Python は 、シーボーンライブラリを使用して視覚化を作成します。 seabornlibrary は、次の import ステートメントを使用して Excel の Python 用に自動的にインポートされ、エイリアス sns で参照 できます。
import seaborn as sns
Seaborn ライブラリを使用して Iris フラワー データ セットのペア プロットを作成するには、次の手順を実行します。
-
[Excel の Python] セルに次のコード スニペットを入力します。 コード スニペットは、ペア プロットを pairplot と呼ばれる変数として格納します。 これは、シーボーンライブラリエイリアス sns とシーボーン関数ペアプロットを使用して ペアプロットを作成します。 pairplot = sns.pairplot(xl("Table1[#All]", headers=True)) pairplot 関数の引数として、コード スニペットはカスタム Python 関数 xl() を使用し、ワークシートの最初のテーブル Table1 を参照します。 これには、テーブルの内容全体 ( [#All] として) が含まれており、テーブルにヘッダー行 ( headers=True として) が含まれていることに注意してください。 この例では、ワークシートの Table1 に Iris データセットが含まれています。
注: エラーが発生した場合は、「 Excel エラーの Python のトラブルシューティング 」を参照してください。
-
Python 数式をコミットした後、Excel の Python は、イメージ オブジェクト内のペア プロットの視覚化を返します。 [image object]\(イメージ オブジェクト\) セルの [カード] アイコンを選択して、視覚化のプレビューを表示します。
-
視覚化を Image オブジェクトとして保持し、Python の計算に引き続き使用します。 画像を Excel グリッドに抽出してサイズを変更し、各プロットをより詳細に表示します。 グリッドに画像を抽出するには、イメージ オブジェクトを含むセルを右クリックまたは Ctrl キーを押しながらクリックし、メニューから [ セルの上にプロットを表示] を選択します。
イメージ オブジェクトの抽出の詳細については、この記事の「 Excel グリッドへのイメージ オブジェクトの抽出 」セクションを参照してください。
Matplotlib を使用して散布図を作成する
この例では、Iris フラワー サンプル データ セットを使用して散布図を作成する方法について説明します。 散布図は、データ セット内の 2 つの数値変数間の関係を示します。 この例では、次のスクリーンショットのような散布図を作成し、 sepal_width と sepal_length 値を比較します。
Excel の Python では、 Matplotlibオープンソース ライブラリを使用して視覚化が作成されます。 Matplotliblibrary は、次の import ステートメントを使用して Excel の Python 用に自動的にインポートされ、 plt として参照できます。
import matplotlib.pyplot as plt
Matplotlib ライブラリを使用して Iris フラワー データ セットの散布図を作成するには、次の手順を実行します。
-
Excel の Python セルで、Matplotlib 散布図関数を使用し、引数として Iris データ セットの sepal_length 列と sepal_width 列を入力します。 この例では、ワークシートの Table1 に Iris データセットが含まれています。plt.scatter(xl("Table1[sepal_length]"), xl("Table1[sepal_width]"))
-
散布図にラベルとタイトルを追加します。 # 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')
注: このコード スニペットは、前の手順の Python 数式の後、同じ Excel セルに追加のコード行として追加することも、ブックの [Excel の新しい Python] セルに入力することもできます。 新しいセルに入力する場合は、行メジャーの計算順序ルールに従って、最初のセルの後に入力してください。
-
Python 数式をコミットすると、Excel の Python は散布図の視覚化をイメージ オブジェクトとして返します。 [image object]\(イメージ オブジェクト\) セルの [カード] アイコンを選択して、視覚化のプレビューを表示します。
注: エラーが発生した場合は、「 Excel エラーの Python のトラブルシューティング 」を参照してください。
-
視覚化をイメージ オブジェクトとして保持し、Python の計算に引き続き使用します。 画像を Excel グリッドに抽出してサイズを変更し、プロットをより詳細に表示します。 グリッドに画像を抽出するには、イメージ オブジェクトを含むセルを右クリックまたは Ctrl キーを押しながらクリックし、メニューから [ セルの上にプロットを表示] を選択します。
イメージ オブジェクトの抽出の詳細については、この記事の「 Excel グリッドへのイメージ オブジェクトの抽出 」セクションを参照してください。
Excel グリッドにイメージ オブジェクトを抽出する
この記事の例で示すように、seaborn や Matplotlib などの Python ライブラリは、Excel セルにデータの視覚化を返すことができます。 既定では、Excel の Python は、これらの視覚化をイメージ オブジェクトとして返します。
イメージ オブジェクト セルのカード アイコンを選択して、視覚化のプレビューを表示します。
Excel グリッドに画像を抽出するには、2 つの方法があります。画像をセル上のプロットとして表示するか、セル内に画像を表示します。
セル上に画像を表示する
次の手順に従って、イメージをセル上のプロットとして表示します。
-
イメージ オブジェクトを含むセルを右クリックまたは Ctrl キーを押しながらクリックし、メニューから [ セルにプロットを表示] を選択します (または、キーボード ショートカット Ctrl + Alt + Shift + C キーを使用します)。 これにより、Excel グリッド上に浮動し、簡単にサイズ変更できるイメージのコピーが作成されます。 元のイメージ オブジェクトは元のセルに残ります。
-
プロットイメージを選択してドラッグして、ワークシートの周囲に移動します。 イメージの角と辺にあるノードを選択してドラッグしてサイズを変更します。
セル内に画像を表示する
セル内に画像を表示するには、次の手順に従います。
-
イメージ オブジェクトを Excel 値として返します。 イメージ オブジェクトのセルを選択し、数式バーの [Python 出力] メニューに移動し、[ Excel 値] を選択します。
プロット画像がセル内に表示されるようになりました。ヒント: Python オブジェクトと Excel 値の間で Python 数式の結果を切り替えるには、キーボード ショートカット Ctrl + Alt + Shift + M を使用します。 キーボード ショートカットの詳細については、「Excel キーボード ショートカットの Python」を参照してください。
-
プロット イメージのサイズは、セルのサイズによって異なります。 セルのサイズを大きくするか、セルをマージして、イメージのサイズ を大きくします。
英語以外の言語に異なるフォントを使用する
中国語、韓国語、タイ語などのラテン以外のアルファベット文字を使用するデータをグラフ化するには、 excel.FontPathを使用します。 既定では、Excel の Python では、ラテン以外のアルファベット文字が空の四角形 ('□') としてレンダリングされます。 これを解決するために、 excel.FontPath を使用すると、 excel モジュールを使用して別のフォントを呼び出し、文字をレンダリングできます。
次のフォントを使用できます。 属性は、Python コードの excel.FontPath に追加されます。 パスは、 属性によって呼び出されたフォント ファイルを参照します。
属性 |
パス |
---|---|
ベンガル語 |
/usr/share/fonts/Vrinda.ttf |
CHINESE_SIMPLIFIED |
/usr/share/fonts/SimSun.ttf |
CHINESE_TRADITIONAL |
/usr/share/fonts/MingLiU.ttf |
ヒンディー語 |
/usr/share/fonts/Mangal.ttf |
日本語 |
/usr/share/fonts/Meiryo.ttf |
韓国語 |
/usr/share/fonts/Batang.ttf |
タイ語 |
/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()