Создайте несколько столбцов и строк неравного размера в matplotlib - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно создать несколько столбцов и строк неравного размера в matplotlib. Вот пример кода:

a = np.random.rand(20, 20)
b = np.random.rand(20, 5)
c = np.random.rand(5, 20)
d = np.random.rand(5,5)
arrays = [a,b,c,d]
fig, axs = plt.subplots(2, 2, sharex='col', sharey= 'row', figsize=(10,10))
for ax, ar in zip(axs.flatten(), arrays):
    ax.imshow(ar)

Однако я получаю это в результате.

python output

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

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете использовать аргументы gridspec height_ratios и width_ratios, чтобы установить желаемую пропорцию, которую должны занимать подзаговоры.

В этом случае из-за симметрии это просто форма, например b.

import numpy as np
import matplotlib.pyplot as plt

a = np.random.rand(20, 20)
b = np.random.rand(20, 5)
c = np.random.rand(5, 20)
d = np.random.rand(5,5)
arrays = [a,b,c,d]
fig, axs = plt.subplots(2, 2, sharex='col', sharey= 'row', figsize=(10,10), 
                        gridspec_kw={"height_ratios" : b.shape, 
                                     "width_ratios" : b.shape})
for ax, ar in zip(axs.flatten(), arrays):
    ax.imshow(ar)

plt.show()

enter image description here

Или, в более общем смысле,

gridspec_kw={"height_ratios" : [a.shape[0], c.shape[0]], 
              "width_ratios" : [a.shape[1], b.shape[1]]}
...