расположение сюжетов matplotlib - PullRequest
0 голосов
/ 07 июня 2018

У меня есть некоторые проблемы с настройкой расстояний между участками.Хотя есть много вопросов относительно подобных проблем, я не смог найти подходящего решения.

Вот простой пример с графиком случайных значений и двумя изображениями с цветными полосами на одном рисунке:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

fig, (ax1, ax2, ax3) = plt.subplots(figsize=(5, 8), nrows=3, ncols=1)

ax1.plot(np.random.rand(100))
ax1.set_ylabel('y-label')
ax1.set_xlabel('x-label')

im2 = ax2.imshow(np.random.random(size=(50, 100)))
ax2.axes.get_xaxis().set_ticks([])
ax2.axes.get_yaxis().set_ticks([])
divider2 = make_axes_locatable(ax2)
cax2 = divider2.append_axes("right", "5%", pad="3%")
cbar2 = plt.colorbar(im2, cax=cax2, orientation='vertical')

im3 = ax3.imshow(np.random.random(size=(50, 100)))
ax3.axes.get_xaxis().set_ticks([])
ax3.axes.get_yaxis().set_ticks([])
divider3 = make_axes_locatable(ax3)
cax3 = divider3.append_axes("right", "5%", pad="3%")
cbar3 = plt.colorbar(im3, cax=cax3, orientation='vertical')

plt.tight_layout()

enter image description here

Как я могу:

  • уменьшить расстояние между двумя нижними изображениями, аналогично расстоянию между графиком ипервое изображение?
  • сдвинуть оба изображения влево, чтобы они были выровнены по метке y графика?

1 Ответ

0 голосов
/ 07 июня 2018

Вы можете использовать макет gridspec, чтобы разместить свои подсюжеты. Хитрость заключается в том, чтобы правильно настроить параметры.Это потребует небольшого тестирования.

Здесь идея заключается в создании сетки с 4 строками и 2 столбцами.Два нижних сюжета будут охватывать оба столбца, а верхний - только последний.Там также будет пустая строка для учета дополнительного пространства, необходимого для метки x верхнего графика.

enter image description here

Конечно, тогда вы не должны вызывать tight_layout, так как это снова зашифровывает все правильно установленные параметры.

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.gridspec import GridSpec

fig = plt.figure(figsize=(5, 8))

gs = GridSpec(nrows=4, ncols=2,height_ratios=[1.2, .1, .8, .8],
                               width_ratios=[.1, 1], 
                               hspace=0.05, wspace=0.1,
                               left=0.05, right=0.9, 
                               bottom=0.02, top=0.98)

ax1=fig.add_subplot(gs[0,1])
ax2=fig.add_subplot(gs[2,:])
ax3=fig.add_subplot(gs[3,:])

ax1.plot(np.random.rand(100))
ax1.set_ylabel('y-label')
ax1.set_xlabel('x-label')

im2 = ax2.imshow(np.random.random(size=(50, 100)))
ax2.axes.get_xaxis().set_ticks([])
ax2.axes.get_yaxis().set_ticks([])
divider2 = make_axes_locatable(ax2)
cax2 = divider2.append_axes("right", "5%", pad="3%")
cbar2 = plt.colorbar(im2, cax=cax2, orientation='vertical')

im3 = ax3.imshow(np.random.random(size=(50, 100)))
ax3.axes.get_xaxis().set_ticks([])
ax3.axes.get_yaxis().set_ticks([])
divider3 = make_axes_locatable(ax3)
cax3 = divider3.append_axes("right", "5%", pad="3%")
cbar3 = plt.colorbar(im3, cax=cax3, orientation='vertical')


plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...