Центрирование iphow matplotlib с отключенными осями - PullRequest
0 голосов
/ 03 апреля 2019

Как я могу центрировать фигуру matlotlib imshow после отключения осей? Пример:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(5,5))
plt.axis('off')

plt.imshow(np.random.randint(10, size=(100, 100)))
plt.show()

Теперь изображение не центрировано, особенно если я применяю tight_layout, поскольку оно учитывает оси, хотя они отключены?!

plt.tight_layout()

Та же проблема возникает, если я, например, добавить цветную полосу. Конечно, можно настроить границы вручную с помощью команды или в пользовательском интерфейсе, однако я бы предпочел более надежное решение, которое работает автоматически с различными формами и размерами изображения. Кроме того, размер фигуры не следует менять во время центрирования. Есть намеки?

1 Ответ

1 голос
/ 03 апреля 2019

Параметры подзаговора, установленные файлом rc по умолчанию , равны

figure.subplot.left    : 0.125  ## the left side of the subplots of the figure
figure.subplot.right   : 0.9    ## the right side of the subplots of the figure
figure.subplot.bottom  : 0.11   ## the bottom of the subplots of the figure
figure.subplot.top     : 0.88   ## the top of the subplots of the figure

Как видите, они асимметричные. Вы можете установить их на что-то симметричное, если хотите

rc = {"figure.subplot.left"    : 0.1, 
      "figure.subplot.right"   : 0.9,
      "figure.subplot.bottom"  : 0.1,
      "figure.subplot.top"     : 0.9 }
plt.rcParams.update(rc)

или

fig.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9)

Тот факт, что fig.tight_layout() не создает центрированный график при отключенных осях, считается ошибкой. Это было исправлено и будет корректно работать с matplotlib 3.1 (который выйдет через пару дней или недель).

...