python - Matplotlib 文本对齐

标签 python matplotlib string-formatting

有没有办法只用一个 ax.text() 命令就可以在第三个轴上显示结果?使用 expandtabs 几乎可以让我到达那里,但文本永远不会正确对齐。

对我来说,使用两个绘图命令似乎不是一个好习惯,你总是需要猜测两者之间的距离,这可能需要一些迭代。

fig, axs = plt.subplots(1,3, figsize=(12,4), 
                       subplot_kw={'aspect': 1, 'xticks': [], 'yticks':[]})
fig.subplots_adjust(wspace=0.05)

values = {'a': 1.35, 'b': 25.1, 'c': 5}

tmpl = """Param1: {a:1.1f}
Long param2: {b:1.1f}
Prm3: {c:1.1f}"""

mystr = tmpl.format(**values)
axs[0].text(0.1, 0.9, mystr, va='top', transform=axs[0].transAxes)
axs[0].set_title('Default')


tmpl = """Param1:\t\t\t{a:1.1f}
Long param2:\t{b:1.1f}
Prm3:\t\t\t{c:1.1f}""".expandtabs()

mystr = tmpl.format(**values)
axs[1].text(0.1, 0.9, mystr, va='top', transform=axs[1].transAxes)
axs[1].set_title('Almost there')


labels = """Param1:
Long param2:
Prm3:"""

tmpl = """{a:1.1f}
{b:1.1f}
{c:1.1f}"""

mystr = tmpl.format(**values)
axs[2].text(0.1, 0.9, labels, va='top', transform=axs[2].transAxes)
axs[2].text(0.65, 0.9, mystr, va='top', ha='right', transform=axs[2].transAxes)
axs[2].set_title('Target')

enter image description here

最佳答案

使用等宽字体,使每个字符占用相同的空间量。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(1,3, figsize=(12,4), 
                       subplot_kw={'aspect': 1, 'xticks': [], 'yticks':[]})
fig.subplots_adjust(wspace=0.05)

values = {'a': 1.35, 'b': 25.1, 'c': 5}

tmpl = """Param1: {a:1.1f}
Long param2: {b:1.1f}
Prm3: {c:1.1f}"""



mystr = tmpl.format(**values)
axs[0].text(0.1, 0.9, mystr, va='top', transform=axs[0].transAxes)
axs[0].set_title('Default')


mono = {'family' : 'monospace'}

textblock = "1234567890\nabcdefghij\nABCDEFGHIJ\n         0"

axs[1].text(0.1, 0.9, textblock, va='top', transform=axs[1].transAxes, fontdict=mono)
axs[1].set_title('Monospaced text block')


axs[2].text(0.1, 0.9, textblock, va='top', transform=axs[2].transAxes)
axs[2].set_title('Not monospaced')

plt.show()

enter image description here

关于python - Matplotlib 文本对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22664091/

相关文章:

python - 全局集中然后标准化图像

string-formatting - Python : replacing several %s with the same variable 中的输出格式

python - Elasticsearch 为嵌套数组创建映射

python - 我可以使用 setup.py 打包需要 PyQt5 的应用程序吗?

python - 将函数应用于数据框中的特定行

python - 如何使用 matplotlib 绘制盒须图

numpy - mplot3d 教程示例未正常运行

python - python-3.6 中带有 'f' 前缀的字符串

python - 如何为新的 python 格式选项设置可变精度

python - 为什么命令字符串没有完全从 Python 传递到系统?