Anonymous
Как уменьшить ненужные пробелы в matplotlib subplot2grid?
Сообщение
Anonymous » 23 дек 2024, 23:39
Я создаю несколько графиков с гистограммами и цветной полосой, но меня мучают огромные белые промежутки между подграфиками, и я не знаю, как их уменьшить. Это пример более сложного кода:
Код: Выделить всё
import numpy as np
import matplotlib.pyplot as plt
ihist = np.array([
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
])
vhist = np.array([
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
])
mins = [1014.3484983803353, -168.92777938399416]
maxs = [5420.578637599565, 1229.7294914536292]
labels = ['x ($\\AA$)', 'y ($\\AA$)']
fig = plt.figure()
# SIAs
iax = plt.subplot2grid((9, 2), (1, 0), rowspan=8)
iax.set_xlabel(labels[0])
iax.set_xlim(mins[0], maxs[0])
iax.set_ylabel(labels[1])
iax.set_ylim(mins[1], maxs[1])
iax.imshow(ihist, origin="lower", extent=[mins[0], maxs[0], mins[1], maxs[1]])
# Vacancies
vax = plt.subplot2grid((9, 2), (1, 1), rowspan=8)
vax.set_xlabel(labels[0])
vax.set_xlim(mins[0], maxs[0])
vax.set_ylabel(labels[1])
vax.set_ylim(mins[1], maxs[1])
vax.yaxis.set_label_position("right")
vax.yaxis.tick_right()
vax_img = vax.imshow(vhist, origin="lower", extent=[mins[0], maxs[0], mins[1], maxs[1]])
# Color bar
cax = plt.subplot2grid((9, 2), (0, 0), colspan=2)
cbar = fig.colorbar(vax_img, cax=cax, orientation="horizontal")
cbar.set_label("Counts per ion")
cbar.ax.xaxis.set_ticks_position("top")
cbar.ax.xaxis.set_label_position("top")
plt.tight_layout()
plt.show()
И вот результат:
[img]
https://i.sstatic.net /wjvsBkbY.png[/img]
как вы можете видеть, между цветовой полосой и гистограммами, а также между гистограммами и нижней частью рисунка есть ненужные пробелы. Я хочу их удалить.
Я думаю, что они вызваны такими вещами, как plt.subplot2grid((9, 2), (1, 0), rowspan=8), но Я сделал это таким образом, чтобы уменьшить вертикальный размер цветной полосы.
Примечание: в реальном коде пределы получаются «на лету», поэтому гистограммы могут иметь одинаковую высоту и ширину или нет. .
Подробнее здесь:
https://stackoverflow.com/questions/793 ... bplot2grid
1734986340
Anonymous
Я создаю несколько графиков с гистограммами и цветной полосой, но меня мучают огромные белые промежутки между подграфиками, и я не знаю, как их уменьшить. Это пример более сложного кода: [code]import numpy as np import matplotlib.pyplot as plt ihist = np.array([ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ]) vhist = np.array([ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ]) mins = [1014.3484983803353, -168.92777938399416] maxs = [5420.578637599565, 1229.7294914536292] labels = ['x ($\\AA$)', 'y ($\\AA$)'] fig = plt.figure() # SIAs iax = plt.subplot2grid((9, 2), (1, 0), rowspan=8) iax.set_xlabel(labels[0]) iax.set_xlim(mins[0], maxs[0]) iax.set_ylabel(labels[1]) iax.set_ylim(mins[1], maxs[1]) iax.imshow(ihist, origin="lower", extent=[mins[0], maxs[0], mins[1], maxs[1]]) # Vacancies vax = plt.subplot2grid((9, 2), (1, 1), rowspan=8) vax.set_xlabel(labels[0]) vax.set_xlim(mins[0], maxs[0]) vax.set_ylabel(labels[1]) vax.set_ylim(mins[1], maxs[1]) vax.yaxis.set_label_position("right") vax.yaxis.tick_right() vax_img = vax.imshow(vhist, origin="lower", extent=[mins[0], maxs[0], mins[1], maxs[1]]) # Color bar cax = plt.subplot2grid((9, 2), (0, 0), colspan=2) cbar = fig.colorbar(vax_img, cax=cax, orientation="horizontal") cbar.set_label("Counts per ion") cbar.ax.xaxis.set_ticks_position("top") cbar.ax.xaxis.set_label_position("top") plt.tight_layout() plt.show() [/code] И вот результат: [img]https://i.sstatic.net /wjvsBkbY.png[/img] как вы можете видеть, между цветовой полосой и гистограммами, а также между гистограммами и нижней частью рисунка есть ненужные пробелы. Я хочу их удалить. Я думаю, что они вызваны такими вещами, как plt.subplot2grid((9, 2), (1, 0), rowspan=8), но Я сделал это таким образом, чтобы уменьшить вертикальный размер цветной полосы. Примечание: в реальном коде пределы получаются «на лету», поэтому гистограммы могут иметь одинаковую высоту и ширину или нет. . Подробнее здесь: [url]https://stackoverflow.com/questions/79302793/how-to-reduce-unnecessary-white-spaces-in-matplotlib-subplot2grid[/url]