2016-05-24 2 views
0

Я пытаюсь сделать 5x4 сетку из сюжетных, и глядя на примерах, мне кажется, что лучший способ:Как сделать более 10 подзаголовков на фигуре?

import matplotlib.pyplot as plt 
plt.figure() 
plt.subplot(221) 

где первые два числа в сюжетном (22) показывает, что сетка 2x2 и третье число указывает, какой из 4 вы делаете. Однако, когда я попытался это я должен был идти до:

plt.subplot(5420) 

и я получил ошибку:

ValueError: Integer subplot specification must be a three digit number. Not 4 

Так же это означает, что вы не можете сделать больше, что 10 делянок, или есть способ вокруг него, или я не понимаю, как это работает?

Заранее спасибо.

+2

Использование запятых: 'plt.subplot (5,4,20)'. Это поведение можно найти в [документации] (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplot). – wflynny

+0

Также актуальный вопрос (хотя вопрос низкого качества): https://stackoverflow.com/questions/35510155/matplotlib-subplot – wflynny

ответ

5

Возможно, вы ищете GridSpec. Вы можете указать размер вашей сетки (5,4) и позицию для каждого графика (строка = 0, столбец = 2, т. Е. - 0,2). Проверьте следующий пример:

import matplotlib.pyplot as plt 

plt.figure(0) 
ax1 = plt.subplot2grid((5,4), (0,0)) 
ax2 = plt.subplot2grid((5,4), (1,1)) 
ax3 = plt.subplot2grid((5,4), (2, 2)) 
ax4 = plt.subplot2grid((5,4), (3, 3)) 
ax5 = plt.subplot2grid((5,4), (4, 0)) 
plt.show() 

, что приводит к следующим образом:

gridspec matplotlib example

Если вы строите вложенных циклов, чтобы сделать вашу полную сетку:

import matplotlib.pyplot as plt 

plt.figure(0) 
for i in range(5): 
    for j in range(4): 
     plt.subplot2grid((5,4), (i,j)) 
plt.show() 

, вы будете получать это:

full 5x4 grid in gridspec matplotlib

участков работает так же, как и в любом сюжетные (назовем его непосредственно из созданных вами осей):

import matplotlib.pyplot as plt 
import numpy as np 

plt.figure(0) 
plots = [] 
for i in range(5): 
    for j in range(4): 
     ax = plt.subplot2grid((5,4), (i,j)) 
     ax.scatter(range(20),range(20)+np.random.randint(-5,5,20)) 
plt.show() 

, в результате чего в этом:

multiple scatterplots in gridspec

Обратите внимание, что могут указывать разные размеры участков (указывая количество столбцов и строк для каждого графика):

import matplotlib.pyplot as plt 

plt.figure(0) 
ax1 = plt.subplot2grid((3,3), (0,0), colspan=3) 
ax2 = plt.subplot2grid((3,3), (1,0), colspan=2) 
ax3 = plt.subplot2grid((3,3), (1, 2), rowspan=2) 
ax4 = plt.subplot2grid((3,3), (2, 0)) 
ax5 = plt.subplot2grid((3,3), (2, 1)) 
plt.show() 

, поэтому:

different sizes for each plot in gridspec

В ссылке, которую я дал в начале вы также найдете примеры для удаления этикеток среди других вещей.

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