matplotlib 如果有下标,plt.show会在行之间添加额外的图例标签间距,但fig.savefig不会?

gzszwxb4  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(125)

当我使用以下代码绘制图形和图例时,

import matplotlib.pyplot as plt

# Create sample data

x = [1, 2, 3, 4]
y1 = [1, 2, 3, 4]
y2 = [4, 3, 2, 1]
y3 = [2, 3, 2, 1]

# Create the main figure

fig, ax = plt.subplots()

# Plot the lines

line1, = ax.plot(x, y1, label='$\\mathdefault{H_{12}\\ 5}$')
line2, = ax.plot(x, y2, label='$\\mathdefault{H_{12}\\ 5}$')
line3, = ax.plot(x, y3, label='$\\mathdefault{H_{12}\\ 5}$')
line3, = ax.plot(x, y3, label='$\\mathdefault{H_{12}\\ 5}$')
line3, = ax.plot(x, y3, label='$\\mathdefault{H_{12}\\ 5}$')
line3, = ax.plot(x, y3, label='$\\mathdefault{H_{12}\\ 5}$')
line3, = ax.plot(x, y3, label='$\\mathdefault{H_{12}\\ 5}$')

# Create a legend for the lines below the figure

fig.legend(loc='lower center', bbox_to_anchor=(0.5, 0), ncol=1, fontsize=8, labelspacing=0.5)

# Set labels and title

ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_title('Multiple Lines with Legend Below')

# Adjust layout for better appearance

plt.tight_layout()
plt.subplots_adjust(bottom=0.4)
plt.show()

我得到了不同数量的图例标签间距之间的行的图例在弹出窗口与保存的数字。在屏幕截图弹出窗口中的数字在spyder自动后端(左)有更多的间距比图保存为png(但也与其他文件格式)使用fig.savefig(filepath,dpi=600, transparent=False,bbox_inches='tight')(右)x1c 0d1x
我覆盖的数字和字体(大小)是完全相同的。我认为,这个问题只显示在图例标签时有下标。似乎plt.show()确实产生额外的空间为下标,而图。savefig没有。这是一个错误,或者我/我们如何修复它。有人有任何想法来解决这个问题或工作?有什么方法可以让plt.show()忽略有下标的事实吗?
根据@Jody Klimak的评论,我的tex相关rcParams是:

'text.antialiased': True,'text.color': 'black','text.hinting': 'force_autohint','text.hinting_factor': 8,'text.kerning_factor': 0,'text.latex.preamble': '\\usepackage{amsmath}\\usepackage{amssymb} ''\\usepackage{sfmath}','text.usetex': False,'mathtext.bf': 'sans:bold','mathtext.cal': 'cursive','mathtext.default': 'it','mathtext.fallback': 'cm','mathtext.fontset': 'dejavusans','mathtext.it': 'sans:italic','mathtext.rm': 'sans','mathtext.sf': 'sans','mathtext.tt': 'monospace',
kse8i1jr

kse8i1jr1#

这不是一个真正的答案,但是这在新的Matplotlib中更容易通过'外部下中心'和layout='constrained'来实现。不需要手动调整子图间距。

import matplotlib.pyplot as plt

rc = {'text.antialiased': True,'text.color': 'black','text.hinting': 'force_autohint','text.hinting_factor': 8,'text.kerning_factor': 0,'text.latex.preamble': '\\usepackage{amsmath}\\usepackage{amssymb} ''\\usepackage{sfmath}','text.usetex': False,'mathtext.bf': 'sans:bold','mathtext.cal': 'cursive','mathtext.default': 'it','mathtext.fallback': 'cm','mathtext.fontset': 'dejavusans','mathtext.it': 'sans:italic','mathtext.rm': 'sans','mathtext.sf': 'sans','mathtext.tt': 'monospace'}
plt.rcParams.update(rc)

# Create sample data
...
# Create the main figure

fig, ax = plt.subplots(layout='constrained')

# Plot the lines
...
# Create a legend for the lines below the figure

fig.legend(loc='outside lower center', ncol=1, fontsize=8, labelspacing=0.5)

# Set labels and title
...
plt.show()
fig.savefig('Legend.png', dpi=200)

相关问题