将刻度和标签移动到 pyplot 图的顶部

Move ticks and labels to the top of a pyplot figure

根据 this question,移动 AxesSubplot 对象的 xticks 和标签可以用 ax.xaxis.tick_top() 完成。但是,我无法让它在一个图形中使用多个轴。

本质上,我想将 xticks 移动到图的最顶部(仅在第一行的子图的顶部显示)。

这是我正在尝试做的一个愚蠢的例子:

fig, axs = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
fig.set_figheight(5)
fig.set_figwidth(10)
for ax in axs.flatten():
    ax.xaxis.tick_top()
plt.show()

显示

我想要的结果是同一张图,但 xticksxticklabels 位于第一行两个图的顶部。

感谢@BigBen 的 sharex 评论。这确实是阻止 tick_top 工作的原因。

要获得结果,您可以将 tick_top 用于顶部的两个图,并使用 tick_params 用于底部的两个图:

fig, axs = plt.subplots(2, 2, sharex=False) # Do not share xaxis
for ax in axs.flatten()[0:2]:
  ax.xaxis.tick_top()
for ax in axs.flatten()[2:]:
  ax.tick_params(axis='x',which='both',labelbottom=False) 

查看实时实现 here