Python matplotlib中的记号

Python matplotlib中的记号,python,matplotlib,plot,subplot,Python,Matplotlib,Plot,Subplot,我正在使用matplotlib创建一个子图,其中顶部x轴与底部x轴不同。我自己将Xtick和Xlabel添加到顶部 我希望在中间和顶部子地块的底部有对应于底部x轴的xtick标记,其中xtick指向外部(或向下),就像在最底部一样。有办法做到这一点吗 这是我到目前为止用于自定义刻度的代码: f, (ax1, ax2, ax3) = plt.subplots(3, sharex=False, sharey=False) f.subplots_adjust(hspace=0) plt.setp([a

我正在使用matplotlib创建一个子图,其中顶部x轴与底部x轴不同。我自己将Xtick和Xlabel添加到顶部

我希望在中间和顶部子地块的底部有对应于底部x轴的xtick标记,其中xtick指向外部(或向下),就像在最底部一样。有办法做到这一点吗

这是我到目前为止用于自定义刻度的代码:

f, (ax1, ax2, ax3) = plt.subplots(3, sharex=False, sharey=False)
f.subplots_adjust(hspace=0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)

ax3.get_xaxis().set_tick_params(direction='out', top='off', which='both')
ax2.get_xaxis().set_tick_params(direction='out', bottom='on', top='off', which='both')


ax1.minorticks_off()
ax1.get_xaxis().tick_top()
ax1.set_xticks([np.divide(1.0,100.0), np.divide(1.0,50.0), np.divide(1.0,35.0),
                np.divide(1.0,20.0), np.divide(1.0,10.0), np.divide(1.0,5.0),
                np.divide(1.0,3.0), np.divide(1.0,2.0), np.divide(1.0,1.0)])
ax1.set_xticklabels([100, 50, 35, 20, 10, 5, 3, 2, 1])
<>我发现,因为我为最上面的情节做了定制的XTICK,所以我不能这样做,并且在底部的子情节中指定“走出去”的方向破坏了中间的刻痕。由于子地块之间没有空间,底部地块的顶部与中间子地块的底部共享其x轴,以此类推

有解决办法吗


通过设置相应的z顺序,可以在底部轴上方绘制中间轴。顶部刻度可以通过调用axvline来完成

import matplotlib.pyplot as plt
import numpy as np

f, (ax1, ax2, ax3) = plt.subplots(3, sharex=False, sharey=False)
f.subplots_adjust(hspace=0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)

ax3.get_xaxis().set_tick_params(direction='out', top='off', which='both')
ax2.get_xaxis().set_tick_params(direction='out', bottom='on', top='off', which='both')


ax1.minorticks_off()
ax1.get_xaxis().tick_top()
ax1.set_xticks([np.divide(1.0,100.0), np.divide(1.0,50.0), np.divide(1.0,35.0),
                np.divide(1.0,20.0), np.divide(1.0,10.0), np.divide(1.0,5.0),
                np.divide(1.0,3.0), np.divide(1.0,2.0), np.divide(1.0,1.0)])
ax1.set_xticklabels([100, 50, 35, 20, 10, 5, 3, 2, 1])

for i, ax in enumerate((ax3, ax2, ax1)):
    ax.set_zorder(i)
for tick in ax2.xaxis.get_ticklocs():
    ax2.axvline(tick, ymin=0.9)
plt.show()    

我不能让它工作。你能举个例子吗?这只会更改轴的绘制顺序。问题是中间的图表需要勾号,勾号在底部向外,但在顶部向内。绘图顺序应足以使中间绘图底部的记号可见。对于顶行,您可以使用axvline和位置列表。