Как правильно автоматизировать размещение fig.suptitle при отображении широких изображений с помощью imshow в matplotlibPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно автоматизировать размещение fig.suptitle при отображении широких изображений с помощью imshow в matplotlib

Сообщение Anonymous »

Проблема в том, что fig.suptitle и ax.imshow (с широкими изображениями) плохо работают вместе. Я понимаю, что существуют некоторые препятствия с соотношением сторон (или чем-то еще), которые необходимо преодолеть из-за того, что изображение широкое, а фигура квадратная.
Тем не менее, я хочу знать формулу или набор параметров конфигурации mpl, которые я могу использовать. поэтому я могу последовательно размещать заголовок независимо от размера изображения или размера сетки.

Что-то вроде F(image_shape, figsize) -> config / location того, как напрямую разместить заголовок над графиком
Например:

Код: Выделить всё

import matplotlib.pyplot as plt
import numpy as np
mat5x10 = (np.arange(5*10).reshape((5,10))%2 == 0)
fig,ax = plt.subplots()
ax.imshow(mat5x10)
fig.suptitle("mat 5x10")
_ = plt.show()
приводит к слишком высокому заголовку:
Изображение

Я знаю, что могу использовать ax.set_title, чтобы разместить его лучше

Код: Выделить всё

mat5x10 = (np.arange(5*10).reshape((5,10))%2 == 0)
fig,ax = plt.subplots()
ax.imshow(mat5x10)
ax.set_title("mat 5x10")
_ = plt.show()
Изображение

но этого недостаточно, когда я создаю несколько графиков. видите, что заголовок идет еще дальше, чтобы учесть несколько столбцов.

Код: Выделить всё

fig,axes = plt.subplots(ncols =2)
mat5x10 = (np.arange(5*10).reshape((5,10))%2 == 0)
axes[0].imshow(mat5x10)

mat2_5x10 = (np.arange(5*10).reshape((5,10))%2 == 1)
axes[1].imshow(mat2_5x10)

fig.suptitle("Two mats")
_ = plt.show()
дает еще худшее размещение,
Изображение

Случайным образом угадывая размер фигуры, я могу приблизить заголовок к тому, который мне нужен (то есть меньше пустого пространства на верхняя часть рисунка)

Код: Выделить всё

fig,axes = plt.subplots(ncols =2, figsize=(10,3))
mat5x10 = (np.arange(5*10).reshape((5,10))%2 == 0)
axes[0].imshow(mat5x10)

mat2_5x10 = (np.arange(5*10).reshape((5,10))%2 == 1)
axes[1].imshow(mat2_5x10)

fig.suptitle("Two mats")
_ = plt.show()
Изображение

Однако я не знаю, почему (10,3) работает для отображения двух матов (5x10). Я уверен, что это связано с соотношением сторон, но не знаю, как разработать метод правильного размещения этого заголовка независимо от того, какие изображения необычной формы я вставляю в рисунок.
такие вещи, как constrained_layout и Tight_layout кажутся неэффективными...
Совет?

Подробнее здесь: https://stackoverflow.com/questions/787 ... e-images-w
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как написать заголовок сюжета более чем в одной строке, используя Suptitle?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Clang Locale Проблема на MacOS при обработке широких персонажей
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Clang Locale Проблема на MacOS при обработке широких персонажей
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Объединение fig.legend с подфигурами в matplotlib
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить скрипичные графики matplotlib с осями? Пробовал использовать fig.tight_layout(), но сохраненные графики бе
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»