2016-01-22 158 views
0

我正在使用matplotlib创建一个子图,其中顶部x轴与底部x轴不同。我自己将xticks和xlabels添加到顶部。matplotlib中的刻度标记

我想在那里有xtick标记对应底部的x轴在中间和顶部子图的底部,其中xticks指向外部(或下部) - 就像在底部一样。有没有办法做到这一点?

这是我使用至今定制蜱代码:

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]) 

我发现,自从我做了定制xticks为顶级情节,我不能做到这一点,并指定方向在底部子图中'出'会遗弃中间的刻度线。由于子图之间没有空间,所以底部图的顶部与中间子图的底部共享其x轴......

有没有解决方法?

enter image description here

回答

0

可以通过设置各自Ž订单绘制底部轴线上方的中间轴。最高滴答可以通过调用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()  
+0

我不能得到这个工作。你能提供一个例子吗?这只是改变轴的绘制顺序。问题是中间图需要刻度标记,它们在底部向外,但在顶部向内。 – grover

+0

我只是将这些行添加到您发布的脚本的底部。绘图顺序应该足以让中间图底部的刻度可见。对于顶行,您可以使用axvline和位置列表。 – Elliot