Добавление одной цветовой шкалы для сюжетов исторических2 и сделать их смежными - PullRequest
1 голос
/ 06 апреля 2020

Я борюсь с настройкой сюжета, над которым я работаю. Я сталкиваюсь с двумя проблемами:

  1. Графики должны быть смежными и иметь 0 пробелов и пробелов. Я установил оба значения на ноль, но между графиками все еще есть пробелы.
  2. Я хотел бы иметь одну цветную полосу для всех вспомогательных участков (все они имеют одинаковый диапазон). Прямо сейчас, код добавляет цветовую полосу к последнему подплоту, так как я понимаю, что ему нужно третье возвращаемое значение hist2D.

Вот мой код:

def plot_panel(pannel_plot):
fig, ax = plt.subplots(3, 2, figsize=(7, 7), gridspec_kw={'hspace': 0.0, 'wspace': 0.0}, sharex=True, sharey=True)
fig.subplots_adjust(wspace=0.0)
ax = ax.flatten()
xmin = 0
ymin = 0
xmax = 0.19
ymax = 0.19
hist2_num = 0
h =[]
for i, j in zip(pannel_plot['x'].values(), pannel_plot['y'].values()):
    h = ax[hist2_num].hist2d(i, j, bins=50, norm=LogNorm(vmin=1, vmax=5000), range=[[xmin, xmax], [ymin, ymax]])
    ax[hist2_num].set_aspect('equal', 'box')
    ax[hist2_num].tick_params(axis='both', top=False, bottom=True, left=True, right=False,
                              labelsize=10, direction='in')
    ax[hist2_num].set_xticks(np.arange(xmin, xmax, 0.07))
    ax[hist2_num].set_yticks(np.arange(ymin, ymax, 0.07))
    hist2_num += 1

fig.colorbar(h[3], orientation='vertical', fraction=.1)
plt.show()

И соответствующий результат:

Результат

Я был бы рад любой пропущенной голове!

1 Ответ

1 голос
/ 06 апреля 2020

Вы можете использовать ImageGrid , который был разработан, чтобы упростить такие вещи

data = np.vstack([
    np.random.multivariate_normal([10, 10], [[3, 2], [2, 3]], size=100000),
    np.random.multivariate_normal([30, 20], [[2, 3], [1, 3]], size=1000)
])


from mpl_toolkits.axes_grid1 import ImageGrid

fig = plt.figure(figsize=(4, 6))
grid = ImageGrid(fig, 111,  # similar to subplot(111)
                 nrows_ncols=(3, 2),  # creates 2x2 grid of axes
                 axes_pad=0.1,  # pad between axes in inch.
                 cbar_mode="single",
                 cbar_location="right",
                 cbar_pad=0.1
                )
for ax in grid:
    h = ax.hist2d(data[:, 0], data[:, 1], bins=100)
fig.colorbar(h[3], cax=grid.cbar_axes[0], orientation='vertical')

enter image description here

или

data = np.vstack([
    np.random.multivariate_normal([10, 10], [[3, 2], [2, 3]], size=100000),
    np.random.multivariate_normal([30, 20], [[2, 3], [1, 3]], size=1000)
])


from mpl_toolkits.axes_grid1 import ImageGrid

fig = plt.figure(figsize=(4, 6))
grid = ImageGrid(fig, 111,  # similar to subplot(111)
                 nrows_ncols=(3, 2),  # creates 2x2 grid of axes
                 axes_pad=0.1,  # pad between axes in inch.
                 cbar_mode="single",
                 cbar_location="top",
                 cbar_pad=0.1
                )
for ax in grid:
    h = ax.hist2d(data[:, 0], data[:, 1], bins=100)
fig.colorbar(h[3], cax=grid.cbar_axes[0], orientation='horizontal')
grid.cbar_axes[0].xaxis.set_ticks_position('top')

enter image description here

...