也許嘗試添加佔位符來處理每個超類別中不相等數量的類別。或使用水平組標籤:
import io
import pandas as pd
import matplotlib.lines as mlines
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
s = """1977 0.5 0.25 0.15 0.1 0.1
1981 0.2 NaN 0.40 0.1 0.2
1983 0.1 0.10 0.30 0.2 0.3"""
t = [('A', 'Cat1'),
('A', 'Cat2'),
('B', 'Cat1'),
('B', 'Cat2'),
('B', 'Cat3')]
index = pd.MultiIndex.from_tuples(t)
df = pd.read_table(io.StringIO(s), names=index)
df.index.name = 'Year'
colors = ['b', 'c', 'k', 'g', 'w']
plt.stackplot(df.index.values,df.fillna(0).T.values,colors=colors)
ha = mlines.Line2D([], [], marker='None', linestyle='None')
hb = mlines.Line2D([], [], marker='None', linestyle='None')
ha1 = mpatches.Patch(color=colors[0], ec='k')
ha2 = mpatches.Patch(color=colors[1], ec='k')
hb1 = mpatches.Patch(color=colors[2], ec='k')
hb2 = mpatches.Patch(color=colors[3], ec='k')
hb3 = mpatches.Patch(color=colors[4], ec='k')
hblank = mpatches.Patch(visible=False)
l1 = plt.legend([ha, ha1, ha2, hblank, hb, hb1, hb2, hb3],
['A', 'Cat1', 'Cat2', '', 'B', 'Cat1', 'Cat2', 'Cat3'],
loc=2, ncol=2) # Two columns, vertical group labels
l2 = plt.legend([ha, hblank, hb, hblank, hblank, ha1, ha2, hb1, hb2, hb3],
['A', '', 'B', '', '', 'Cat1', 'Cat2', 'Cat1', 'Cat2', 'Cat3'],
loc=4, ncol=2) # Two columns, horizontal group labels
ax = plt.gca()
ax.add_artist(l1)
ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.show()
![enter image description here](https://i.stack.imgur.com/R3o9Y.png)
哦,當然,不過這是正確的答案!我沒有想到用空的陰謀和標籤來填充傳說。我也不知道「visible = False」選項存在。非常感謝 ! – baloo