gpt4 book ai didi

python - 在不使用等宽字体的情况下,在多个点对齐 Pyplot 图例行中的文本

转载 作者:行者123 更新时间:2023-12-05 01:49:12 26 4
gpt4 key购买 nike

我正在尝试在 Pyplot 中创建一个简洁的图例。到目前为止我有这个:

Legend

    fig = plt.figure()
ax = plt.gca()

marker_size = [20.0, 40.0, 60.0, 100.0, 150.0]
marker_color = ['black', 'red', 'pink', 'white', 'yellow']

ranges = [0.0, 1.5, 20.0, 60.0, 500.0]

marker_edge_thickness = 1.2
s = [(m ** 2) / 100.0 for m in marker_size]
scatter_kwargs = {'edgecolors' : 'k', 'linewidths' : marker_edge_thickness}

for i in range(len(marker_size)):

if i == (len(marker_size) - 1):

label_str = '{:>5.1f} $\leq$ H$_2$'.format(ranges[i])

else:

label_str = '{:>5.1f} $\leq$ H$_2$ < {:>5.1f}'.format(ranges[i], ranges[i + 1])

ax.scatter([], [], s = s[i], c = marker_color[i],
label = label_str, **scatter_kwargs)

#ax.legend(prop={'family': 'monospace'})
ax.legend()

plt.show()

没问题,但符号在行之间没有正确对齐。我想在多个点对齐行,对齐小数点、小于和大于符号以及 H2。我可以使用单字字体(根据这个答案:Adding internal spaces in pyplot legend),但这很难看,而且似乎与 H2 中的下标 2 不兼容。这在 LaTeX 中是可能的(例如使用 alignat 环境);在 Pyplot 中可以吗?

最佳答案

您可以将空格替换为 '\u2007', a space that is as wide as a digit .

在大多数字体中,空格字符比数字窄得多。除了看起来不太好看的等宽字体外,每个字母都有自己的宽度。字符宽度甚至可以根据前后字母的不同而不同(例如,对于“VA”,“A”可以稍微低于“V”,这称为 "kerning" )。 UTF-8 中为具有特定宽度的空格引入了特殊字符。

import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.gca()

marker_size = [20.0, 40.0, 60.0, 100.0, 150.0]
marker_color = ['black', 'red', 'pink', 'white', 'yellow']

ranges = [0.0, 1.5, 20.0, 60.0, 500.0]

marker_edge_thickness = 1.2
s = [(m ** 2) / 100.0 for m in marker_size]
scatter_kwargs = {'edgecolors': 'k', 'linewidths': marker_edge_thickness}

for i in range(len(marker_size)):
label_str = f"{ranges[i]:>5.1f}$\leq$H$_2$"
if i < (len(marker_size) - 1):
label_str += f"$<${ranges[i + 1]:>5.1f}"
label_str = label_str.replace(' ', '\u2007')
ax.scatter([], [], s=s[i], c=marker_color[i], label=label_str, **scatter_kwargs)

ax.legend()
plt.tight_layout()
plt.show()

aligning text in legend

关于python - 在不使用等宽字体的情况下,在多个点对齐 Pyplot 图例行中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74378923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com