Два сюжета выходят слишком долго (длина) - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь построить две гистограммы, используя matplotlib.pyplot.subplots.Я создал вспомогательные сюжеты внутри функции, но когда я выводил вспомогательные сюжеты, они слишком длинные по высоте и недостаточно длинные по ширине.

Вот функция, которую я написал:

def corr_bar(data1, data2, method='pearson'):

    # Basic configuration.
    fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(7, 7))
    ax1, ax2 = axes
    corr_matrix1 = data1.corr(method=method)
    corr_matrix2 = data2.corr(method=method)
    cmap = cm.get_cmap('coolwarm')
    major_ticks = np.arange(0, 1.1, 0.1)
    minor_ticks = np.arange(0, 1.1, 0.05)

    # Values for plotting.
    x1 = corr_matrix1['price'].sort_values(ascending=False).index
    x2 = corr_matrix2['price'].sort_values(ascending=False).index
    values1 = corr_matrix1['price'].sort_values(ascending=False).values
    values2 = corr_matrix2['price'].sort_values(ascending=False).values

    im1 = ax1.bar(x1, values1, color=cmap(values1))
    im2 = ax2.bar(x2, values2, color=cmap(values2))

    # Formatting for plot 1.
    ax1.set_yticks(major_ticks)
    ax1.set_yticks(minor_ticks, minor=True)
    plt.setp(ax1.get_xticklabels(), rotation=45, ha='right', rotation_mode='anchor')
    ax1.grid(which='both')
    ax1.grid(which='minor', alpha=0.4)
    ax1.grid(which='major', alpha=0.7)
    ax1.xaxis.grid(False)

    # Formatting for plot 2.
    ax2.set_yticks(major_ticks)
    ax2.set_yticks(minor_ticks, minor=True)
    plt.setp(ax2.get_xticklabels(), rotation=45, ha='right', rotation_mode='anchor')
    ax2.grid(which='both')
    ax2.grid(which='minor', alpha=0.4)
    ax2.grid(which='major', alpha=0.7)
    ax2.xaxis.grid(False)

    fig.tight_layout()
    plt.show()

Эта функция (при запуске с двумя Pandas DataFrames) выводит изображение, подобное следующему:

enter image description here

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

Я пытался использовать ax.set(aspect='equal')метод, но он "сжимает" гистограмму.Кто-нибудь знает, что я могу сделать, чтобы решить эту проблему?

Спасибо.

1 Ответ

1 голос
/ 14 апреля 2019

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

...