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