Python Matplotlibでカスタムカラーとカスタム領域サイズを使って4D散布図をプロットする方法
はじめに
散布図(Scatter Plot)は、2つの変数間に関係性があるかどうかを確認するために、2次元データを視覚化する際に非常に便利なグラフです。散布図では、データがX値とY値を持つ点(ドット)として表現されます。
実装手順
1. matplotlibのインストール
まず、以下のコマンドでmatplotlibをインストールします。
pip install matplotlib
2. matplotlibのインポート
import matplotlib.pyplot as plt
tennis_stats = (('Federer', 20),('Nadal', 20),('Djokovic', 17),('Sampras', 14),('Emerson', 12),('laver', 11),('Murray', 3),('Wawrinka', 3),('Zverev', 0),('Theim', 1),('Medvedev',0),('Tsitsipas', 0),('Dimitrov', 0),('Rublev', 0))
3. データの準備
次に、データを配列形式で準備します。データベースやスプレッドシートからデータを読み込み、以下のような形式に整形することもできます。
titles = [title for player, title in tennis_stats]
players = [player for player, title in tennis_stats]
4. 基本的な散布図の描画
matplotlibの他のメソッドと同様に、.scatterメソッドにはX値とY値の配列を渡す必要があります。
注意: X値とY値は同じサイズである必要があり、データはデフォルトでfloat型に変換されます。
plt.scatter(titles, players)
<matplotlib.collections.PathCollection at 0x28df3684ac0>

5. 軸ラベルとフォーマットの調整
上記の出力を見ると、X軸のグランドスラム優勝回数がfloat型で表示されてしまっています。そこで、整数に変換するとともに、X軸とY軸にタイトルを追加しましょう。軸のフォーマッターは.set_major_formatterで上書きできます。
from matplotlib.ticker import FuncFormatter
def format_titles(title, pos):
return '{}'.format(int(title))
plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles))
plt.xlabel('Grandslam Titles')
plt.ylabel('Tennis Player')
plt.scatter(titles, players)

6. 色による第4の次元の追加
散布図を単なる2Dチャートだと考えないでください。散布図には第3の次元(面積)や、さらに第4の次元(色)を追加することもできます。以下では、その具体的な方法を説明します。
まず、好みの色を定義し、それらをランダムに選択して各データポイントに割り当てます。
alpha値を指定すると、各ポイントが半透明になり、重なり合う部分を視覚的に確認できるようになります。この値が大きいほど、ポイントの透明度は低くなります。
import random
# 独自のカラースケールを定義
random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F']
# データ数と同じ数の色をランダムに設定
color = [random.choice(random_colors) for _ in range(len(titles))]
plt.scatter(titles, players, c=color, alpha=0.5)
<matplotlib.collections.PathCollection at 0x28df2242d00>

7. サイズ(面積)による第3の次元の追加
続いて、データポイントの表示サイズ(面積)を変えてみましょう。
import random
# 独自のカラースケールを定義
random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F']
# データ数と同じ数の色をランダムに設定
color = [random.choice(random_colors) for _ in range(len(titles))]
# サイズを設定
size = [(50 * random.random()) ** 2 for _ in range(len(titles))]
plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles))
plt.xlabel('Grandslam Titles')
plt.ylabel('Tennis Player')
plt.scatter(titles, players, c=color, s=size, alpha=0.1)
<matplotlib.collections.PathCollection at 0x28df22e2430>

忘れてはならないのは、グラフの最終的な目的は「データを理解しやすくすること」だという点です。
ここまでで、散布図でできることの基本を紹介しました。さらに発展させると、例えば色をサイズに依存させて、同じサイズのポイントを同じ色にすることもできます。これにより、データの区別がより容易になります。
詳細については、公式ドキュメント https://matplotlib.org/ を参照してください。
完全なコード例
最後に、これまでの内容をすべてまとめたコード全体を示します。
# インポート
import matplotlib.pyplot as plt
import random
# データの準備
tennis_stats = (('Federer', 20),('Nadal', 20),('Djokovic', 17),('Sampras', 14),('Emerson', 12),('laver', 11),('Murray', 3),('Wawrinka', 3),('Zverev', 0),('Theim', 1),('Medvedev',0),('Tsitsipas', 0),('Dimitrov', 0),('Rublev', 0))
titles = [title for player, title in tennis_stats]
players = [player for player, title in tennis_stats]
# カスタム関数
from matplotlib.ticker import FuncFormatter
def format_titles(title, pos):
return '{}'.format(int(title))
# 独自のカラースケールを定義
random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F']
# データ数と同じ数の色をランダムに設定
color = [random.choice(random_colors) for _ in range(len(titles))]
# サイズを設定
size = [(50 * random.random()) ** 2 for _ in range(len(titles))]
plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles))
plt.xlabel('Grandslam Titles')
plt.ylabel('Tennis Player')
plt.scatter(titles, players, c=color, s=size, alpha=0.1)
<matplotlib.collections.PathCollection at 0x2aa7676b670>

-
Matplotlibを使ってPythonで3D密度マップを描画する方法を徹底解説
MatplotlibとNumPyを組み合わせると、Pythonで簡単に3D密度マップ(濃度分布図)を作成できます。本記事では、pcolormesh()メソッドを使って擬似カラープロットとして密度マップを可視化する具体的な手順を、サンプルコード付きでわかりやすく解説します。 3D密度マップを描画する基本の手順 NumPyでデータを生成する:side、x、y、zの各データをNumPyで作成します。特にlinspace関数を使うと、指定した2点間の範囲を任意の分割数で等間隔にデータ生成できるため便利です。 座標行列を作成する:sideデータをもとにmeshgrid()を使い、座標ベクトルから2次元
-
Python Matplotlibでカスタムカラーとカスタム領域サイズを使って4D散布図をプロットする方法
はじめに散布図(Scatter Plot)は、2つの変数間に関係性があるかどうかを確認するために、2次元データを視覚化する際に非常に便利なグラフです。散布図では、データがX値とY値を持つ点(ドット)として表現されます。実装手順1. matplotlibのインストールまず、以下のコマンドでmatplotlibをインストールします。pip install matplotlib2. matplotlibのインポートimport matplotlib.pyplot as plttennis_stats = ((Federer, 20),(Nadal, 20),(Djokovic, 17),(Sampr