2013-10-28 2 views
2

Я рисую сетку подсетей 4x3, и я хотел бы иметь фиксированный интервал между ними. Я использую subplots_adjust, см. Ниже. Однако цифры расположены равномерно в общем окне и не имеют фиксированных пространств. Спасибо за ваш совет.Подстроки Python фиксированное расстояние

import matplotlib.pyplot as plt 
import numpy as np 

data = np.random.rand(10,10) 

fig, axes = plt.subplots(4, 3) 

axes[0, 0].imshow(data) 
axes[1, 0].imshow(data) 
axes[2, 0].imshow(data) 
axes[3, 0].imshow(data) 

axes[0, 1].imshow(data) 
axes[1, 1].imshow(data) 
axes[2, 1].imshow(data) 
axes[3, 1].imshow(data) 

axes[0, 2].imshow(data) 
axes[1, 2].imshow(data) 
axes[2, 2].imshow(data) 
axes[3, 2].imshow(data) 

plt.setp(axes, xticks=[], yticks=[]) 

plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=.05, hspace=.05) 

plt.show() 

ответ

3

Проблема вы столкнулись, является то, что аргументы subplots_adjust относительные значения, то есть доли ширины и высоты фигуры, см docu, а не абсолютные значения.

Вы рисуете 4 строки и 3 столбца квадратов (10x10) в «холсте по умолчанию» (может быть 8x6). Однако размер фигуры определяется по ширине раз по высоте, поэтому столбцы раз подряд. Таким образом, вы должны поменять местами строки и столбцы и измените подзаговоры вызов

fig, axes = plt.subplots(3, 4) 

и ваши пространства будут равны. Если нет, попробуйте добавить figsize=(8,6), чтобы установить размер фигуры. Конечно, у вас есть корректировка индексов линий imshow.
enter image description here

В качестве альтернативы, вы можете поменять местами figsize аргументы.

+0

спасибо, что помогли. Но мне все же приходится играть с фиксисом, чтобы настроить интервал b/w на фигах. – user2926577

1

Вы можете контролировать расстояние и положение каждого подзаголовка напрямую, используя gridspec. Есть дополнительная информация here. Вот пример:

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

data = np.random.rand(10,10) 

plt.figure(figsize = (6,6)) # set the figure size to be square 

gs = gridspec.GridSpec(4, 3) 
# set the space between subplots and the position of the subplots in the figure 
gs.update(wspace=0.1, hspace=0.4, left = 0.1, right = 0.7, bottom = 0.1, top = 0.9) 


for g in gs: 
    ax = plt.subplot(g) 
    plt.imshow(data) 

plt.show() 

gridspec example

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