2015-02-26 4 views
6

Я пытаюсь создать функцию построения графика, которая принимает в качестве входных данных количество требуемых графиков и вычисляет их с использованием pylab.subplots и sharex=True. Если количество требуемых графиков нечетное, то я хотел бы удалить последнюю панель и принудительно установить метки метки на панели справа над ней. Я не могу найти способ сделать это и использовать опцию sharex=True в то же время. Количество подзаголовков может быть довольно большим (> 20).matplotlib с нечетным количеством подзаголовков

Вот пример кода. В этом примере я хочу заставить ярлыки ярлыков, когда i=3.

import numpy as np 
import matplotlib.pylab as plt 

def main(): 
    n = 5 
    nx = 100 
    x = np.arange(nx) 
    if n % 2 == 0: 
     f, axs = plt.subplots(n/2, 2, sharex=True) 
    else: 
     f, axs = plt.subplots(n/2+1, 2, sharex=True) 
    for i in range(n): 
     y = np.random.rand(nx) 
     if i % 2 == 0: 
      axs[i/2, 0].plot(x, y, '-', label='plot '+str(i+1)) 
      axs[i/2, 0].legend() 
     else: 
      axs[i/2, 1].plot(x, y, '-', label='plot '+str(i+1)) 
      axs[i/2, 1].legend() 
    if n % 2 != 0: 
     f.delaxes(axs[i/2, 1]) 
    f.show() 


if __name__ == "__main__": 
    main() 

ответ

7

Если заменить последний if в вашей main функции с этим:

if n % 2 != 0: 
    for l in axs[i/2-1,1].get_xaxis().get_majorticklabels(): 
     l.set_visible(True) 
    f.delaxes(axs[i/2, 1]) 

f.show() 

Это должно сделать трюк:

Plot

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