/ / Організовувати подпланки матплотлиба в перекісній сітці - пітон, матплотліб, подсхема

Встановіть підрозділи matplotlib у перекосованої сітки - python, matplotlib, subplot

Використання matplotlib, я хотів би відобразити кількапід-ділянки на сітці, яка має різну кількість стовпців на рядок, де кожна підскладка має приблизно однаковий розмір, а підсхеми розташовані так, що вони більш-менш центровані, наприклад:

Сітка осей у малюнку (2, 3, 2)

Це досить проста справа, щоб створити сітку, яка має шаблон 2, 3, 2 gridspec, але проблема є в тому gridspec, що не дивно, вирівнює їх до сітки, тому ділянки в рядках з 2 ділянками в них ширші:

Сітка вирівняна з сіткою

Ось код для створення цього:

from matplotlib import gridspec
from matplotlib import pyplot as plt

fig = plt.figure()

arrangement = (2, 3, 2)
nrows = len(arrangement)

gs = gridspec.GridSpec(nrows, 1)
ax_specs = []
for r, ncols in enumerate(arrangement):
gs_row = gridspec.GridSpecFromSubplotSpec(1, ncols, subplot_spec=gs[r])
for col in range(ncols):
ax = plt.Subplot(fig, gs_row[col])
fig.add_subplot(ax)

for i, ax in enumerate(fig.axes):
ax.text(0.5, 0.5, "Axis: {}".format(i), fontweight="bold",
va="center", ha="center")
ax.tick_params(axis="both", bottom="off", top="off", left="off",
right="off", labelbottom="off", labelleft="off")

plt.tight_layout()

Я знаю, що можу створити купу підзаготівків іналаштуйте їх розташування, розробивши його геометрію, але я думаю, що це може бути трохи складніше, тому я сподівався, що може бути доступний простіший метод.

Варто зауважити, що навіть якщо я використовую (2, 3, 2) домовленості, я хотів би зробити це для довільних колекцій, а не тільки для цього.

Відповіді:

3 для відповіді № 1

Ідея полягає в тому, щоб знайти спільнузнаменник між під-ділянками, тобто найбільшою підсхемою, до якої бажана сітка може бути складена, і охоплювати всі під-ділянки протягом декількох з таких, щоб досягти бажаної компонування.

введіть опис зображення тут

Тут у вас є 3 рядки і 6 стовпців і коженsubplot охоплює 1 рядок і два стовпці, тільки те, що підскладки в першому ряду знаходяться в підплощах позицій 1/2 і 3/4, а в другому ряду вони займають позиції 0/1, 2/3, 4/5.

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

gs = gridspec.GridSpec(3, 6)
ax1a = plt.subplot(gs[0, 1:3])
ax1b = plt.subplot(gs[0, 3:5])
ax2a = plt.subplot(gs[1, :2])
ax2b = plt.subplot(gs[1, 2:4])
ax2c = plt.subplot(gs[1, 4:])
ax3a = plt.subplot(gs[2, 1:3])
ax3b = plt.subplot(gs[2, 3:5])


for i, ax in enumerate(plt.gcf().axes):
ax.text(0.5, 0.5, "Axis: {}".format(i), fontweight="bold",
va="center", ha="center")
ax.tick_params(axis="both", bottom="off", top="off", left="off",
right="off", labelbottom="off", labelleft="off")

plt.tight_layout()

plt.show()

введіть опис зображення тут