Multi-Index(マルチインデックス)とは、下図のようにインデックスがOne, Twoとa, bのように複数のインデックスがあることを言います。
本記事では、上記のようなデータセットに対して、下図右のように横軸が2段表示になるような雛形コードを載せました。参考までに、下図左はデフォルト設定でグラフ化した場合で、横軸が(One, a)のようなカッコで1行表示になっています。
■本プログラム
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
plt.rcParams['font.size'] = 14
data = {
'A': [1,2,3,4],
'B': [5,6,7,8],
'C': [9,10,11,12],
'D': [13,14,15,16],
}
index = pd.MultiIndex.from_tuples([
('One', 'a'), ('One', 'b'),
('Two', 'a'), ('Two', 'b')
])
df = pd.DataFrame(data, index=index)
ax = df.plot(kind='bar', figsize=(6, 4))
plt.ylabel('data')
for p in ax.patches:
ax.annotate(str(p.get_height()), (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='bottom')
ax = plt.gca()
ax.set_xticks(np.arange(0.5, len(df.index), 2), minor=False)
xticklabels_top = [i[0] for i in df.index[::2]]
ax.set_xticklabels(xticklabels_top, minor=False, fontsize=14, va='top', rotation=0)
ax.set_xticks(np.arange(0, len(df.index), 1), minor=True)
xticklabels_bottom = [i[1] for i in df.index]
ax.set_xticklabels(xticklabels_bottom, minor=True, fontsize=14, va='bottom', rotation=0)
ax.legend(bbox_to_anchor=(1, 1))
plt.setp(ax.get_xticklabels(minor=False), y=-0.05)
plt.setp(ax.get_xticklabels(minor=True), y=-0.05)
plt.grid(axis='y', linestyle='dotted', color='gray')
plt.tight_layout()
plt.savefig('sample.jpg', bbox_inches='tight')
以上
<広告>
リンク
リンク
リンク