Python 縦軸,横軸のラベルが文字列の場合の等高線図

 本記事では、下図のような縦軸と横軸が文字列の場合の等高線図を描く雛形コードを載せました。図示するにあたって、下図例の横軸では「特大、大、中、小、極小」の順に、「0, 1, 2, 3, 4」の座標を割り当てることによって実現しています。縦軸も同様の考え方です。

下表は、上図の元となるデータセットです。

■本プログラム

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
import japanize_matplotlib
plt.rcParams['font.size'] = 15 # グラフの基本フォントサイズの設定

# csvの読み込み
df = pd.read_csv('sample_data.csv', encoding='cp932')
print(df)

grades = df['成績'].tolist()
sizes = df.columns[1:].tolist()
data = df.iloc[:, 1:].values

# メッシュグリッドの作成
X, Y = np.meshgrid(np.arange(len(sizes)), np.arange(len(grades)))

# 色の設定
#norm = Normalize(vmin=data.min(), vmax=data.max())  # データの最小値と最大値に設定
norm = Normalize(vmin=0, vmax=25)  
cmap = plt.cm.get_cmap('bwr') # bwr, cool, coolwarm, jet

# 等高線図の作成
fig = plt.figure(figsize=(8, 8))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
contourf = ax.contourf(X, Y, data, cmap=cmap, norm=norm)
plt.colorbar(contourf, ax=ax, label='値')
ax.set_aspect('equal')

# 軸の設定
ax.set_title('等高線図')
ax.set_xlabel('大きさ')
ax.set_ylabel('成績')
ax.set_xticks(np.arange(len(sizes)))
ax.set_xticklabels(sizes)
ax.set_yticks(np.arange(len(grades)))
ax.set_yticklabels(grades)
ax.invert_yaxis()
plt.grid(True)
plt.show()

以上

<広告>