2013-09-19 2 views
4

Я использую этот код, который обеспечивает хорошие участки один за следующий (используя IPython-ноутбук & Панды)Создать подзаголовки в Matplotlib в цикле?

for subsm in subsl: 
    H7, subsm = sumsubdesc2(table, subsm) 
    ax1=H7.plot() 
    plt.title('Rolling 4q mean %s'%(subsm)) 
    ax1.set_title('Rolling 4q mean %s'%(subsm)) 
    ax1.set_ylim(100000,600000) 

Я хотел бы получить участки «2up» рядом друг к следующему для всего 3 строки (5 подзаголовков) не могут понять, как справиться с этим, поскольку все примеры подзаголовки, похоже, предназначены для подсекции эфира данными или конкретными графиками и конкретным размещением сетки.

Так что я не знаю, как создать основной сюжет, а затем подложить несколько графиков (в данном случае 5) с названиями как два-вверх?

Редактировать линии два кода, так как я ушел из вызова функции ;-(

+0

Знаете ли вы количество подзаговоров заранее? Или ваш сюжет будет динамически расти? – Schorsch

+0

Я бы хотел динамическое решение, хотя в конкретном экземпляре я знаю, что у меня есть 5 диаграмм – dartdog

ответ

6

Вот что вам нужно сделать «названия в виде сдвоенных.»:

import math 
import matplotlib.pylab as plt 

nrows = int(math.ceil(len(subsl)/2.)) 

fig, axs = plt.subplots(nrows, 2) 

ylim = 100000, 600000 
for ax, subsm in zip(axs.flat, subsl): 
    H7, subsm = sumsubdesc2(table, subsm) 
    H7.plot(ax=ax, title='Rolling 4q mean %s' % subsm) 
    ax.set_ylim(ylim) 

Это будет работать, даже если axs.size > len(subsl) с StopIteration возникает, когда заканчивается кратчайший итерируемый. Обратите внимание, что axs.flat является итератором над номером строка-порядок сплющенный массив axs.

Чтобы скрыть последний участок, который не отображается, выполните следующие действия:

axs.flat[-1].set_visible(False) 

В целом, для axs.size - len(subsl) дополнительных участков в конце сетки сделать:

for ax in axs.flat[axs.size - 1:len(subsl) - 1:-1]: 
    ax.set_visible(False) 

ту часть выглядит немного язвительно, поэтому я объясню:

Массив axs имеет axs.size элементов. Индексом последнего элемента сплющенной версии axs является axs.size - 1. subsl имеет len(subsl) элементов, и те же рассуждения применяются к индексу последнего элемента. Но нам нужно отступить от последнего элемента от axs до последнего , застроенного по графику, поэтому нам нужно сделать шаг -1.

+0

@dartdog Я не понимаю вашего комментария. –

+0

Извините, что получил ошибку на 3 fig, axs = plt.subplots (nrows, 2, sharey = True) >>> range() целочисленный конечный аргумент, ожидаемый, получил float. – dartdog

+0

Ответ ниже дает мне достойный результат, но он перемаркировал ось x от 0 до 70 вместо того, чтобы использовать даты, как это было при прямой печати? – dartdog

1

я не уверен, но я думаю, что вы спрашиваете,

# not tested 
import math 
import matplotlib.pylab as plt 

Nrows = math.ceil(len(subsl)/2.) 
for i in range(len(subsl)): 
    subsm = subsl[i] 
    H7, subsm = sumsubdesc2(table, subsm) 
    plt.subplot(Nrows, 2, i+1) 

    # do some plotting 

    plt.title('Rolling 4q mean %s'%(subsm)) 

Я не уверен, что вы имеете в виду

+0

Выглядит хорошо, дайте мне уйти. но я хочу связать заголовок с каждым экземпляром диаграммы, используя переменную («Rolling 4q mean% s»% (subsm)) – dartdog

+0

Мое редактирование с вызовом функции выше наполнило мой вопрос. Не зациклился на том, как это сделать. – dartdog

+0

@dartdog. Я отредактировал свой ответ, чтобы сделать то, что, как я думаю, вы спрашиваете (и исправить ошибку). –

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