概要
こんにちは、すのくろです。
今回は散布図の応用で、マーカーに意味を持たせたバブルチャートのグラフ作成方法について説明していきます。
バブルチャートは下記のようなグラフです。
散布図の基本については下記の記事で解説してます。基本をまずはおさらいしたい人はこちらからお願いします。記事
それでは早速やっていきましょう!
下準備
まずは下準備として必要なライブラリをインポートします。
この辺は毎度お馴染みのもので、コピペでOKです。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
続いて、グラフ作成用のデータを生成します。
初めにdfとして、列名が「x」「y」「size」の3列でそれぞれ10データがある形の表データを作成しました。
その後に、ラベルのようなものとして「group」列を数値ではなくA〜Iのアルファベットを使用して追加しています。
x = np.arange(1,11)
y = np.random.randint(1, 10, 10)
size = np.random.randint(1, 10, 10)*30
group = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
data = np.array([x, y, size]).T
cols = ["x", "y", "size"]
df = pd.DataFrame(data, columns=cols)
df["group"] = group
df
###
# x y size group
# 0 1 2 90 A
# 1 2 7 30 B
# 2 3 9 30 C
# 3 4 5 90 D
# 4 5 6 120 E
# 5 6 2 90 F
# 6 7 2 240 G
# 7 8 2 150 H
# 8 9 4 90 I
# 9 10 9 180 J
散布図の作成
まず、おさらいですが散布図の作成は下記のコードのように、
plt.scatter(x, y)
で行います。
今回の場合は下記のようになります。
plt.scatter("x", "y", data=df)
plt.xlabel('x')
plt.ylabel('y')
マーカーサイズの変更
続いて、ここから本題のマーカーのサイズをデータによって変更させて、バブルチャートにしていきます。
マーカーサイズの変更は下記のように引数に「s」を入れます。
plt.scatter(x, y, s=OOOO)
通常は、s=20のように数値を入れて調整します。
しかし、今回のようにマーカーごとにサイズを変更してバブルチャートにしたい場合はsに数値ではなく、x,yに対応したデータを入れてあげます。
下記が例になります。
plt.scatter("x", "y", s="size", data=df)
plt.xlabel('x')
plt.ylabel('y')
このように、データごとに「size」のデータに対応するマーカーサイズになっています。
マーカーの色を変更
次に、バブルチャートのマーカーの色を変更します。
コードは下記のように、plt.scatter()の引数で「c」を入れます。
c = np.arange(len(df))
plt.scatter("x", "y", c=c, s="size", data=df)
plt.xlabel('x')
plt.ylabel('y')
今回はマーカー色に0〜9の数値列(c = np.arange(len(df)))を与えているため、データごとに色が変わっています。
これも先ほどのマーマーサイズを別々に変えるのと同じ考えですね。
マーカーにテキストを入れる
最後に、作成したバブルチャートにカテゴリーなどの文字を入れる方法についてです。
文字を入れておくことで、どのマーカーがどのカテゴリなのかがわかります。
コードは下記になります。
c = np.arange(len(df))
plt.scatter("x", "y", c=c, s="size", data=df)
# マーカーにテキスト入れる
for idx, row in df.iterrows():
plt.annotate(row["group"], (row["x"], row["y"]), c="red")
plt.xlabel('x')
plt.ylabel('y')
コードの解説をしていきます。
まずは、上2行で今までと同様に色をつけたマーカーでバブルチャートを作成します。
その後、
plt.annotate(row["group"], (row["x"], row["y"]), c="red")
で、「group」列の値をx、yに対応する所に赤字でテキストとしてプロットしています。
このplt.annotate()の処理を、
for idx, row in df.iterrows():
内で行い、dfの各行ごとに処理を行い、全ての行に対してx, yの座標部分にgroup列の値をテキストとして入れてあげてます。
まとめ
今回は、散布図の応用としてバブルチャートの作成方法について説明しました。
これによって、各データの3つの特徴量がより可視化されて使えるグラフになったかと思います。
是非、バブルチャートを活用していいただければ幸いです。
Pythonを中心としたプログラミングをより体系的に学びたいと言う方向けに、おすすめのオンラインスクールを2つ厳選して紹介していますので、こちらもよければご覧ください!
以上、ここまでお読みいただき、ありがとうございました!
コメント