2016-01-22 148 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