Как исправить размер только области «рисования» (игнорируя заголовки, метки) в Matplotlib?Python

Программы на Python
Ответить
Anonymous
 Как исправить размер только области «рисования» (игнорируя заголовки, метки) в Matplotlib?

Сообщение Anonymous »

Я создаю графики для исследовательской работы с помощью библиотеки Python Matplotlib и хочу, чтобы все графики имели одинаковый размер для «внутренней» области данных (где фактически рисуется график или изображение) . По умолчанию figsize устанавливает общие размеры фигуры, включая поля для заголовков, меток осей, галочек, цветных полос и т. д. Следовательно, если у меня есть один imshow с заголовком/метками/цветной полосой, а другой без их, фактическая область рисования изменяется, т. е. область, в которой отображаются данные, не имеет одинаковый размер между двумя фигурами.
Это становится еще сложнее с подсюжетами. Например, если я использую plt.subplots(1, 1) с заголовком, метками осей и цветовой полосой и сравниваю его с plt.subplots(4, 4) (16 подграфиков в сетке), довольно сложно добиться того, чтобы каждая из этих областей «рисования» подграфиков была точно одинакового размера, просто настроив figsize. Часто пространство, занимаемое цветовой полосой, делениями/метками по осям и интервалом подграфиков, изменяет доступную область данных способами, которые сложно стандартизировать.
Есть ли способ зафиксировать данные площадь до фиксированного размера (скажем, 2 на 2 дюйма) независимо от заголовков, меток, цветных полос или конфигурации подграфика? В идеале я хотел бы гарантировать, что если я удалю заголовки или метки осей с одного рисунка или изменю количество подграфиков, область данных каждой оси останется того же размера, что и на другом рисунке, который имеет заголовки/метки или использует другой макет подграфика.
Любые предложения или примеры кода будут с благодарностью приняты. Спасибо!
Примеры:

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

## No title, axis labels, or colorbar
fig, ax = plt.subplots(figsize=(4, 2))
ax.imshow(np.sin(np.linspace(0, 10, 100)).reshape(-1, 1),
aspect='auto',
cmap='Spectral')
plt.tight_layout()
plt.show()
Изображение

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

## Same plot as above with title, axis labels, and colorbar
fig, ax = plt.subplots(figsize=(4, 2))
im = ax.imshow(np.sin(np.linspace(0, 10, 100)).reshape(-1, 1),
aspect='auto',
cmap='Spectral')
ax.set_title('Sine Wave', fontsize=16, fontfamily='monospace')
ax.set_xlabel('Time', fontsize=16, fontfamily='monospace')
ax.set_ylabel('Amplitude', fontsize=16, fontfamily='monospace')
plt.colorbar(im, ax=ax, aspect=3)
plt.tight_layout()
plt.show()
Изображение


Подробнее здесь: https://stackoverflow.com/questions/793 ... bels-in-ma
Ответить

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

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

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

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

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