在 Python Matplotlib 中,我需要提供如何为多个绘图保持完全相同的轴/脊柱边框大小的建议。与轴包含多少位数字无关。
下面的代码显示了生成两个图的示例,每个图都有不同的轴值(轴上的 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值、图表的纵横比等,但没有令人满意的结果。
我希望设置静态值,应该在图中放置轴,为轴上的更多数字创建足够的边距。
这是将
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()
输出: