Я просмотрел несколько сообщений (например, этот ), в которых обсуждалась zorder
, и, судя по ответам, которые я просмотрел, похоже, что следующий небольшой воспроизводимый пример не должен рисовать сетку наверху бара. Или, другими словами, не должен ли тот факт, что линии сетки назначены ax2
, имеющему меньший номер zorder, заставлять их рисоваться под полосой и треугольником? Как заставить линии сетки располагаться ниже всего остального?
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots(figsize=(5, 4))
pts = ax1.plot(1, 1, 'r^', label='Stream Flow')
ax1.set_zorder(4)
ax1.set_facecolor('none')
ax1.set_xlim([0, 3])
ax1.set_ylim([0, 3])
ax2 = ax1.twinx()
ax2.set_xlim([0, 3])
ax2.set_ylim([0, 30])
bar = ax2.bar(1, 15, align='center', color='b', width=0.1, label='Some other value')
ax2.set_zorder(2)
ax2.set_ylabel(r'Other value', rotation=270, labelpad=15)
lns = pts + [bar]
labs = [l.get_label() for l in lns]
leg = ax2.legend(lns, labs, loc='lower right', frameon=True)
leg.get_frame().set_linewidth(0.0)
ax2.yaxis.grid(color='silver', zorder=1)
# Following two lines were experiments that failed
#fig.set_zorder(ax2.get_zorder()-1)
#fig.patch.set_visible(False)
plt.show()
Вот что я вижу: линии сетки нанесены поверх полосы (плохо), но ниже треугольника (хорошо). введите описание изображения здесь