matplotlib imshow центрирование с отключенными осями

#python #matplotlib #imshow

#python #matplotlib #imshow

Вопрос:

Как я могу центрировать фигуру 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:

Параметры подзаголовка, установленные в 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 (который будет выпущен через пару дней или недель).