2016-01-22 2 views
0

Я создаю подзаголовок с использованием matplotlib, где верхняя ось x отличается от нижней оси x. Я сам добавил ярлыки и xlabels.метки в matplotlib

Я хотел бы, чтобы в нижней части средней и верхней подзаголовки были xtick знаки, соответствующие нижней оси x, где стрелки указывают наружу (или вниз) - как на самом дне. Есть ли способ сделать это?

Это код, я использую до сих пор, чтобы настроить тики:

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 для верхнего участка, я не могу это сделать, и указать направление «out» в нижней подзаголовке разрушает отметки в середине. Поскольку между подзаголовками нет места, верхняя часть нижней части имеет свою ось x с нижней частью среднего подзаголовка и т. Д.

Есть ли обходной путь для этого?

enter image description here

ответ

0

Вы можете нарисовать среднюю ось над нижними осями, установив соответствующие 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()  
+0

Я не могу заставить это работать. Можете ли вы привести пример? Это просто изменяет порядок, в котором рисуются оси. Проблема в том, что средние графы нуждаются в галочках, которые расположены наружу внизу, но внутрь вверху. – grover

+0

Я просто добавил эти строки в конец сценария, который вы опубликовали. Порядок вытягивания должен быть достаточным для того, чтобы оставить тики в нижней части среднего участка видимым. Для верхних строк вы можете просто использовать axvline и список позиций. – Elliot

Смежные вопросы