Как изменить ширину между участками с помощью matplotlib / gridspec? - PullRequest
0 голосов
/ 09 октября 2018

Когда я создаю фигуру с подсюжетами в python, используя matplotlib и gridspec, у меня возникает проблема, заключающаяся в том, что я не могу соответствующим образом отрегулировать ширину промежутка между подсюжетами.

Хотя вариант hspaceпараметр работает нормально уже в диапазоне от 0 до 1, мне нужно изменить wspace до 100, чтобы получить некоторое движение, и я не могу установить его достаточно высоко, чтобы метка оси Y не касаласьСюжет слева.

Вот минимальный рабочий смапл.Я также пытался варьировать ширину в figsize, но это только делало мои подсюжеты шире / меньше и не влияло на расстояние между ними.

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure(figsize=([7,4]))

gs = gridspec.GridSpec(2,18)
gs.update(wspace=100., hspace=0.3)

ax1 = plt.subplot(gs[0,:6])
ax1.set_ylabel('ylabel', labelpad=0, fontsize=12)

ax2 = plt.subplot(gs[0,6:12])
ax2.set_ylabel('ylabel', labelpad=0, fontsize=12)

ax3 = plt.subplot(gs[0,12:18])
ax3.set_ylabel('ylabel', labelpad=0, fontsize=12)

ax4 = plt.subplot(gs[1,3:9])
ax4.set_ylabel('ylabel', labelpad=0, fontsize=12)

ax5 = plt.subplot(gs[1,9:15])
ax5.set_ylabel('ylabel', labelpad=0, fontsize=12)

Один из способов - увеличить количество ячеекgridspec и поместите пустые ячейки между вложенными участками, но мне интересно, почему изменяющийся wspace не выполняет эту работу?

Работа с python 2.7 и matplotlib 1.5.1 на кластере linux.

1 Ответ

0 голосов
/ 09 октября 2018

Я не думаю, что число вроде 100 вообще имеет какой-либо смысл.Это будет означать, что пространство должно быть в 100 раз больше, чем подзаговор.

Фигура 7 дюймов в ширину.Принимая во внимание левую границу в 12,5% и правую границу в 10%, у вас осталось 5,425 дюйма, чтобы разойтись по участкам.Давайте назовем этот размер s.

Имея n субплоты (или ячейки сетки), уравнение, которое определяет пространство и размер ячейки, равно

 s = n*axw + (n-1)*axw*wspace 

с axw, являющимсяразмер ячейки в дюймах.Мы можем использовать эту формулу для визуализации для данного размера фигуры и набора чисел ячеек (n), размера осей и расстояния в дюймах в зависимости от wspace.

enter image description here

Мы видим, что существует максимальный размер для осей и расстояния.Чем больше количество ячеек, тем ниже максимально возможный размер.Кроме того, чем больше оси, тем меньше расстояние и наоборот.Это хорошо объясняет, почему нет разницы между wspace = 10 и 100.

Я отметил размер 0,6 дюйма на графике.Предположим, это минимальное расстояние, которое вам нужно в дюймах, чтобы надписи не перекрывались.Из графика мы можем прочитать, что это возможно только при n, равном 9 или меньше.Сетка из 18 ячеек, следовательно, никогда не позволит использовать неперекрывающиеся метки для данного размера фигуры.

Начните с использования большей цифры, вы, конечно, можете уменьшить количество ячеек.

Поскольку любое число, использованное в примере из вопроса, кратно 3, сетка может быть уменьшенав меньшую сетку с такими же свойствами.В этом случае пространство установлено правильно.Например, для wspace=1.5 (то есть на 50% больше, чем размер ячейки)

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure(figsize=([7,4]))

gs = gridspec.GridSpec(2,6)
gs.update(wspace=1.5, hspace=0.3)

ax1 = plt.subplot(gs[0,:2])
ax1.set_ylabel('ylabel', labelpad=0, fontsize=12)

ax2 = plt.subplot(gs[0,2:4])
ax2.set_ylabel('ylabel', labelpad=0, fontsize=12)

ax3 = plt.subplot(gs[0,4:6])
ax3.set_ylabel('ylabel', labelpad=0, fontsize=12)

ax4 = plt.subplot(gs[1,1:3])
ax4.set_ylabel('ylabel', labelpad=0, fontsize=12)

ax5 = plt.subplot(gs[1,3:5])
ax5.set_ylabel('ylabel', labelpad=0, fontsize=12)

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...