多个绘图的恒定轴/脊柱边框大小

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

在 Python Matplotlib 中,我需要提供如何为多个绘图保持完全相同的轴/脊柱边框大小的建议。与轴包含多少位数字无关。

Generated plots:

下面的代码显示了生成两个图的示例,每个图都有不同的轴值(轴上的 1 位数字与 3/4 位数字),轴+书脊边框大小不同。相应地,如果位数较少,则边界较大;如果位数较多,则边界稍小。 我需要保持相同的尺寸。谢谢你的帮助

import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter
import matplotlib.ticker as ticker

plt.style.use('classic')
plt.rcParams.update({'mathtext.default': 'regular'})
plt.rcParams['font.family'] = 'Arial'
plt.rcParams["axes.linewidth"] = 0.50


i=0

plots=['plot1','plot2']

xlabel=['x_plot1','x_plot2']
ylabel=['y_plot1','y_plot2']

for i in range(len(plots)):
    fig, ax = plt.subplots( figsize=[6.0, 4.8])
    fig.tight_layout()

    if(i==0):
        ax.plot([0,9], [0,9])
        ax.axis([0, 9, 0, 9])

    if(i==1):
        ax.plot([0,1000], [0,1000])
        ax.axis([0, 1000, 0, 1000])


    ax.set_xlabel(xlabel[i],fontsize='12')
    ax.set_ylabel(ylabel[i],fontsize='12')
    
    ax.grid(linestyle='solid', linewidth=0.6, color='#000000', which='major', zorder=1, clip_on=False)  #New #EAEAEA   old #C3C3C3
    plt.gcf().canvas.draw()
    ax.set_axisbelow(True)
    ax.spines['bottom'].set_linewidth(1.5)
    ax.spines['left'].set_linewidth(1.5)

    plt.yticks(fontsize='12', zorder=0)
    plt.xticks(fontsize='12', zorder=0)

    plt.savefig(plots[i]+'.png', dpi=300, bbox_inches='tight', transparent=False)
    plt.clf()

尝试过改变figsize值、图表的纵横比等,但没有令人满意的结果。

我希望设置静态值,应该在图中放置轴,为轴上的更多数字创建足够的边距。

python matplotlib axis figsize
1个回答
0
投票

这是将

bbox_inches='tight'
传递到
plt.savefig
时的预期行为:将调整绘图边距以适合轴,但由于刻度标签的宽度不同,因此会产生不同的结果。删除
bbox_inches='tight'
并使用
subplots_adjust
指定布局:

import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter
import matplotlib.ticker as ticker

plt.style.use('classic')
plt.rcParams.update({'mathtext.default': 'regular'})
plt.rcParams['font.family'] = 'Arial'
plt.rcParams["axes.linewidth"] = 0.50


i=0

plots=['plot1','plot2']

xlabel=['x_plot1','x_plot2']
ylabel=['y_plot1','y_plot2']

for i in range(len(plots)):
    fig, ax = plt.subplots( figsize=[6.0, 4.8])
    fig.tight_layout()

    if(i==0):
        ax.plot([0,9], [0,9])
        ax.axis([0, 9, 0, 9])

    if(i==1):
        ax.plot([0,1000], [0,1000])
        ax.axis([0, 1000, 0, 1000])


    ax.set_xlabel(xlabel[i],fontsize='12')
    ax.set_ylabel(ylabel[i],fontsize='12')
    
    ax.grid(linestyle='solid', linewidth=0.6, color='#000000', which='major', zorder=1, clip_on=False)  #New #EAEAEA   old #C3C3C3
    plt.gcf().canvas.draw()
    ax.set_axisbelow(True)
    ax.spines['bottom'].set_linewidth(1.5)
    ax.spines['left'].set_linewidth(1.5)

    plt.yticks(fontsize='12', zorder=0)
    plt.xticks(fontsize='12', zorder=0)
    plt.subplots_adjust(0.2, 0.1, 0.9, 0.9)

    plt.savefig(plots[i]+'.png', dpi=300, transparent=False)
    plt.clf()

输出:

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