两个子图出来的时间太长(长度)

问题描述 投票:0回答:1

我试图用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')方法,但它“scrunches”条形图。有人会碰巧知道我能做些什么来解决这个问题吗?

谢谢。

python matplotlib subplot
1个回答
1
投票

定义figsize=(7,7)时,您要设置整个图形的大小而不是子图。因此,在这种情况下,您的整个数字必须是正方形。您应该将其更改为figsize=(14,7)或使用大于14的数字来获得一些额外的空间。

© www.soinside.com 2019 - 2024. All rights reserved.