2015-06-29 6 views
0

Я попытался создать сетку из 2-х строк, 3 столбца (каждая из которых имеет несколько данных, нанесенных на нее) с использованием matplotlib. Однако, независимо от того, что я пытаюсь, окончательная сохраненная фигура - это всего лишь один из сюжетов, а остальное пустое. Я знаю, что другие были созданы, но они не появляются в финальном изображении. Вот одна базовая версия того, что я пытаюсь.Python: Создание нескольких графиков на одной фигуре с помощью цикла

Прокомментированные части показывают некоторые альтернативы, которые я видел.

f,axarr = plt.subplots(2,3, sharex='col', sharey='row') 

for i,someargs in enumerate(namelist): 
    x1,y1,x2,y2 = somefunction(someargs) #output data 
    ax = axarr.flat[i] #or ax=axarr[row,col] 
    ax.plot(x1,y1) 
    ax.plot(x2,y2) 
plt.savefig("name") 
#or f.savefig("name") 

Есть ли что-то не так с тем, как я это делаю? Изображение, которое я получаю, находится по адресу http://i.imgur.com/QxYRnPT.png Любая помощь будет принята с благодарностью.

+0

Обратите внимание, что вы сохраняете свои оси в 'axarr', затем выбираете текущую ось из' axrr' – cel

+0

Я исправил опечатку, спасибо. – opaco

+0

Вы проверили, что 'len (namelist)' is '6'? Здесь работает ваш код. – cel

ответ

0

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

Эта функция делает много вещей (и требует параллелизма), поэтому трудно точно сказать, что она делает.

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

0

вот так, как вы можете использовать цикл, чтобы сгенерировать subplots, и вы можете скрыть оси, которые вам не нужны:

import pylab as plt 
import numpy as np 
fig ,axs=plt.subplots(2,3, sharex='col', sharey='row') 
axs[-1,-1].axis('off') 
namelist=['a','b','c','d','e'] 
ax=axs.ravel() 
for i,someargs in enumerate(namelist): 
    x1,y1,x2,y2 = somefunction(someargs) 
    ax[i].plot(x1,y1) 
    ax[i].plot(x2,y2) 
Смежные вопросы