我使用matplotlib.gridspec为3个轴创建一个网格。
我现在的代码看起来像:
from matplotlib import pyplot as plt
from matplotlib.gridspec import GridSpec
import pandas as pd
df = pd.DataFrame({'d1': [20,30,40], 'd2': [10,20,30]}, index=['a', 'b', 'c']) # Dataset to emulate real data structure
df = df.apply(lambda l: l / l.sum() * 100).T
df.index = ['Some dataset', 'Some dataset 2']
fig = plt.figure(figsize=(6.25, 4.0))
gs = GridSpec(3, 2, figure=fig)
ax1 = fig.add_subplot(gs[:2, 0])
ax2 = fig.add_subplot(gs[:2, 1])
hbar_ax = fig.add_subplot(gs[2, :])
df.plot(ax=hbar_ax, kind='barh', stacked=True, width=0.5, color=['#FF3B3B', '#F4B083', '#9CD5A4'], legend=None)
hbar_ax.invert_yaxis()
hbar_ax.set_xlim(-1, 101)
for n in df:
for i, (cs, ab, pc) in enumerate(zip(df.iloc[:, 0:].cumsum(1)[n],
df[n], df[n])):
hbar_ax.text(cs - ab / 2, i, str(np.round(pc, 1)) + '%',
va = 'center', ha = 'center', fontsize='medium')
hbar_ax.tick_params(axis='both', which='both', length=0)
hbar_ax.tick_params(
axis='x',
which='both',
bottom=False,
top=False,
labelbottom=False)
plt.tight_layout()
它产生了这个图形:
但我不知道如何调整顶部的图空间看起来像这样:
2条答案
按热度按时间sdnqo3pr1#
这个answer是正确的,子图是最好的方法。然而,下面的实现更符合习惯:
bttbmeg02#
可以使用subfigures:
这给出: