2015-07-31 4 views
0

Я использую subplot2grid для отображения графиков. Однако отображаются не все подзаголовки. Очевидно, что это связано с утверждением if. Однако в моем полном коде мне нужны эти операторы if, потому что в зависимости от некоторых условий графики имеют разные форматы. Я хочу, чтобы все 3 подзаголовка отображались (по одному для каждого i). Однако первый отсутствует. Как отобразить его правильно?matplotlib subplot2grid отображается неправильно

Вот упрощенный код:

import matplotlib.pyplot as plt 
fig=plt.figure() 
for i in xrange(0,3): 
    if i==1: 
     ax=plt.subplot2grid((3,1),(i,0)) 
     ax.plot([1,2],[1,2]) 
     fig.autofmt_xdate() 
    else: 
     ax=plt.subplot2grid((3,1),(i,0), rowspan=2) 
     ax.plot([1,2],[1,2]) 
     fig.autofmt_xdate() 
plt.show() 
+1

макет, что вы хотели бы видеть. Трудно узнать, что вы имеете в виду, без изображения (или даже описания). –

+0

Я хочу, чтобы все 3 подзаголовка отображались (по одному для каждого i). Однако первый отсутствует. – user3276418

+0

Мне все еще нужно больше деталей. 'rowspan = 2' заставляет меня думать, что вы хотите, чтобы средние оси были наполовину высотой, чем внешние оси, но вы на самом деле не вербализировали эту цель. –

ответ

1

Я бы просто использовать gridspec модуль из Matplotlib. Затем вы можете напрямую установить отношение ширины/высоты.

Затем вы можете сделать что-то вроде этого:

import numpy 
from matplotlib import gridspec 
import matplotlib.pyplot as plt 

def do_plot_1(ax): 
    ax.plot([0.25, 0.5, 0.75], [0.25, 0.5, 0.75], 'k-') 

def do_plot_2(ax): 
    ax.plot([0.25, 0.5, 0.75], [0.25, 0.5, 0.75], 'g--') 


fig = plt.figure(figsize=(6, 4)) 
gs = gridspec.GridSpec(nrows=3, ncols=1, height_ratios=[2, 1, 2]) 

for n in range(3): 
    ax = fig.add_subplot(gs[n]) 
    if n == 1: 
     do_plot_1(ax) 
    else: 
     do_plot_2(ax) 

fig.tight_layout() 

enter image description here

Чтобы использовать plt.subplot2grid, вы должны были бы эффективно сделать что-то вроде этого:

fig = plt.figure(figsize=(6, 4)) 
ax1 = plt.subplot2grid((5,1), (0, 0), rowspan=2) 
ax2 = plt.subplot2grid((5,1), (2, 0), rowspan=1) 
ax3 = plt.subplot2grid((5,1), (3, 0), rowspan=2) 

Поскольку у вас есть два оси с rowspan=2, ваша сетка должна быть 2 + 1 + 2 = 5 блоков.

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