[matplotlib][pyplot][scatter] 散布図を作成

pyplot.scatter 出力例 コアライブラリ
この記事は約9分で読めます。

Matplotlibライブラリを使って、散布図を生成するサンプルコードと注意点を紹介します。
Matplotlibはグラフ描画ライブラリで、Python in Excel のコアライブラリの1つです。散布図を作成するには、pyplotモジュールのscatter関数を使用します。

2023年10月現在、Python in Excel は Microsoft 365 Insider Program のベータチャネルを選択することによって使用できるベータ版のExcelでのみ利用可能です。
ベータ版のExcelのインストール・初期設定方法は以下で詳しく紹介しています。

出力結果例

pyplot.scatter 出力例

scatter 関数の構文

plt.scatter(x, y [, 任意引数])
戻り値PathCollection
引数説明
x, y
(必須)
float or
配列
処理対象のデータ(DataFrame)
sfloat or
配列
マーカーのサイズ
デフォルト:36.0(6.0の2乗)
clist or
配列
マーカーの色
デフォルト:#1f77b4
markerstring or
MarkerStyle
マーカーの形
matplotlib.markersで指定
デフォルト:”o”
cmapstring or
Colormap
カラーマップ名
デフォルト:”viridis”
※引数c が RGB(A) の場合はこの引数は無視される
normstring or
Normalize
引数cmap を使用して色にマッピングする前に、スカラーデータを [0, 1] 範囲にスケールするために使用される正規化方法
※引数c が RGB(A) の場合はこの引数は無視される
vmin, vmaxfloatカラーマップがカバーするデータ範囲を定義
※引数c が RGB(A) の場合はこの引数は無視される
alphafloatマーカーの透明度
デフォルト:1(opaque)
linewidthsfloat or
配列
マーカーのエッジの幅
デフォルト:1.5
edgecolorsstring or
list
マーカーのエッジの色
選択肢:”face”, “none”, None, RGB等の色文字列
デフォルト:”face”
plotnonfiniteboolTrueの場合、無限の点(the infinite points)がグラフにプロットされる
デフォルト:False
dataindexable
オブジェクト
DataFrame等
指定した場合、次の引数は文字列 s を指定できる(例:data[s])
x, y, s, linewidths, edgecolors, c, facecolor, facecolors, color
kwargsdictその他の設定を辞書型で指定
scatter関数の引数一覧(「引数」列に「必須」の記載がないものはすべて任意引数)

サンプルコード

サンプルデータ
データが150件、名称が「IrisDataSet2」のテーブルを使用して説明します。

Python in Excel 入門 - describe4
サンプルデータを取得する方法は、ここを展開してください。
サンプルデータを取得する手順
  • 1
    「数式」タブ→「Pythonの挿入」ボタン→「Pythonサンプルを試す」をクリック
    Python in Excel 入門 - sample1
  • 2
    Excelウィンドウ右側に表示されたペーンの「サンプルの挿入」をクリック
    Python in Excel 入門 - sample2
  • 3
    サンプルデータのシートが追加されます
    Python in Excel 入門 - sample3

前提

以降のサンプルコードは、DataFrame型の x変数, y変数が定義済みであることを前提としています。

# 別のセルに定義しておく
x = xl("IrisDataSet2[sepal_length]")
y = xl("IrisDataSet2[sepal_width]")
# 同じセルに記述してもよい
x = xl("IrisDataSet2[sepal_length]")
y = xl("IrisDataSet2[sepal_width]")
plt.scatter(x, y)

また、複数のscatter関数の例を列挙して記述していますが、実際に試してみる場合はそれぞれ別のセルに記述してください。(列挙して記述するとプロットが重なって表示されます。)

# こんな風に複数記述されている場合は、1つずつ試すか別のセルに記述してください
plt.scatter(x, y, edgecolors="r")                 # サイズ=1.5(デフォルト)
plt.scatter(x, y, edgecolors="r", linewidths=4.0) # サイズ=4.0
plt.scatter(x, y, edgecolors="r", linewidths=0)   # サイズ=0(非表示)

必須引数(x, y)のみ指定

# matplotlib.pyplotは「plt」のエイリアス名でimport文なしで使える
# import matplotlib.pyplot as plt
plt.scatter(x, y)

結果

Python in Excel 入門 - pyplot scatter01
x, yのみ指定

セルに「Image」と表示された場合は、Python出力の種類を「Excelの値」に変更してください。

Python in Excel 入門 - py icon
Python in Excel 入門 - kihon7

セル内のイメージを拡大する場合は、セルをクリックし、右上に表示される「参照の作成」アイコンをクリックしてください。

Python in Excel 入門 - pairplot1
Python in Excel 入門 - pairplot2

マーカーのサイズ(s)

plt.scatter(x, y, s=12.0, edgecolors=None)

結果

Python in Excel 入門 - pyplot scatter02
s=12.0, edgecolors=None の例

マーカーの形(marker)

plt.scatter(x, y, s=100, marker="*")

結果

Python in Excel 入門 - pyplot scatter11
marker=”*” の例

マーカーの色(c, cmap, norm, vmin, vmax, alpha)

# cmap,normを指定
import matplotlib.colors as colors
plt.scatter(x, y, c=x, cmap="hsv", norm=colors.CenteredNorm())
# cmap,vmin,vmaxを指定
plt.scatter(x, y, c=x, cmap="hsv", vmin=0, vmax=10)
# alphaを指定
plt.scatter(x, y, alpha=0.5)
# cにRGBを指定
plt.scatter(x, y, c="#00ff00")

結果 

Python in Excel 入門 - pyplot scatter03
cmap=”hsv”, norm=colors.CenteredNorm() の例
Python in Excel 入門 - pyplot scatter04
cmap=”hsv”, vmin=0, vmax=10 の例
Python in Excel 入門 - pyplot scatter05
alpha=0.5 の例
Python in Excel 入門 - pyplot scatter06
c=”#00ff00″ の例

マーカーのエッジ(linewidths, edgecolors)

# 色を赤(r)に設定
plt.scatter(x, y, edgecolors="r")                 # サイズ=1.5(デフォルト)
plt.scatter(x, y, edgecolors="r", linewidths=4.0) # サイズ=4.0
plt.scatter(x, y, edgecolors="r", linewidths=0)   # サイズ=0(非表示)

結果

Python in Excel 入門 - pyplot scatter07
edgecolors=”r” の例
Python in Excel 入門 - pyplot scatter08
edgecolors=”r”, linewidths=4.0 の例
Python in Excel 入門 - pyplot scatter09
edgecolors=”r”, linewidths=0 の例
# リストを渡してプロット毎に指定することも可能
colors = np.random.choice(["r", "g", "b"], x.size)
plt.scatter(x, y, c="#ffffff", edgecolors=colors, linewidths=3.0)

結果

Python in Excel 入門 - pyplot scatter10
edgecolorsにリストを渡した例

data引数を使った指定方法

df = xl("IrisDataSet2[#すべて]", headers=True)
plt.scatter("sepal_length", "sepal_width", c="sepal_length", data=df)

結果

Python in Excel 入門 - pyplot scatter12
data引数の例

凡例を表示

# species別にDataFrameを取得する
df = xl("IrisDataSet2[#すべて]", headers=True)
setosa = df.query('species == "setosa"')
x1 = setosa["sepal_length"]
y1 = setosa["sepal_width"]
versicolor = df.query('species == "versicolor"')
x2 = versicolor["sepal_length"]
y2 = versicolor["sepal_width"]
virginica = df.query('species == "virginica"')
x3 = virginica["sepal_length"]
y3 = virginica["sepal_width"]

# species毎にscatter関数を指定する
plt.scatter(x1, y1, c="#E91E63", label="setosa")
plt.scatter(x2, y2, c="#00BCD4", label="versicolor")
plt.scatter(x3, y3, c="#FFC107", label="virginica")
plt.legend(loc="lower right", title="Species")

結果

Python in Excel 入門 - pyplot scatter13
凡例を表示

legend関数の引数「loc」には、”upper”, “lower”, “center”, “right”, “left”, “best” を指定できます。デフォルトの”best”は一番プロットに重ならない場所に凡例を表示してくれますが、速度が遅くなるようです。

ラベルを表示

plt.scatter(x, y)
plt.xlabel("sepal_length")
plt.ylabel("sepal_width")
plt.title("Sepal length and width analysis")

結果

Python in Excel 入門 - pyplot scatter14
タイトルと軸ラベルを表示

注意点

軸ラベルやタイトル、凡例に、日本語は表示されないようです。

plt.scatter(x, y, label="アヤメ")
plt.legend(loc="lower right", title="種類")
plt.xlabel("がく片の長さ")
plt.ylabel("がく片の幅")
plt.title("がく片の長さと幅の分析")
Python in Excel 入門 - pyplot scatter16
ラベルに日本語は表示されない

参考

タイトルとURLをコピーしました