Pandas построение графиков делает многое автоматически, но потом не всегда легко изменить. В этом случае pandas не учитывает, что дважды используется один и тот же ax
, и дважды вызывает plt.colorbar
.
Если требуется манипулирование результатом, его часто проще создать сюжет прямо с матплотлиб. Обратите внимание, что вторая цветовая полоса нарисована ближе всего к графику. Поэтому порядок изменяется в приведенном ниже коде.
import pandas as pd
import matplotlib.pyplot as plt
fig = plt.figure(num=1, clear=True)
ax = fig.add_subplot()
d = pd.DataFrame({'a': range(10), 'b': range(10), 'c': range(10)})
e = pd.DataFrame({'a': range(1,11), 'b': range(10), 'c': range(10)})
d_scatter = ax.scatter(x=d['a'], y=d['b'], c=d['c'], cmap='GnBu')
e_scatter = ax.scatter(x=e['a'], y=e['b'], c=e['c'], cmap='RdPu')
plt.colorbar(e_scatter)
plt.colorbar(d_scatter)
plt.show()
PS: при наличии нескольких цветовых полос столбцы также могут быть положить явно в свой собственный сюжет. Таким образом, взаимные расстояния можно контролировать лучше. Особенно, когда будет 3 или более цветных полос, иначе все будет выглядеть ужасно.
import pandas as pd
import matplotlib.pyplot as plt
fig, axes = plt.subplots(ncols=3, gridspec_kw={'width_ratios': [15, 1, 1] })
d = pd.DataFrame({'a': range(10), 'b': range(10), 'c': range(10)})
e = pd.DataFrame({'a': range(1,11), 'b': range(10), 'c': range(10)})
d_scatter = axes[0].scatter(x=d['a'], y=d['b'], c=d['c'], cmap='GnBu')
e_scatter = axes[0].scatter(x=e['a'], y=e['b'], c=e['c'], cmap='RdPu')
plt.colorbar(d_scatter, cax=axes[1])
plt.colorbar(e_scatter, cax=axes[2])
plt.show()