【问题标题】:Putting newline in matplotlib label with TeX in Python?在 Python 中使用 TeX 在 matplotlib 标签中添加换行符?
【发布时间】:2011-02-09 06:13:55
【问题描述】:

如何在 matplotlib 中的绘图标签(例如 xlabel 或 ylabel)中添加换行符?例如,

plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math \n continues here") 

理想情况下,我希望 y 标记也居中。有没有办法做到这一点?重要的是标签同时包含 TeX(包含在 '$' 中)和换行符。

【问题讨论】:

    标签: python plot graphing matplotlib


    【解决方案1】:

    您可以两全其美:LaTeX 命令的自动“转义”换行符:

    plt.ylabel(r"My long label with unescaped {\LaTeX} $\Sigma_{C}$ math"
               "\n"  # Newline: the backslash is interpreted as usual
               r"continues here with $\pi$")
    

    (而不是使用三行,用单个空格分隔字符串是另一种选择)。

    事实上,Python 会自动连接彼此跟随的字符串文字,您可以混合使用原始字符串 (r"…") 和带有字符插值的字符串 ("\n")。

    【讨论】:

    • 只是一个简短的评论——这是一个完美的解决方案,当该标签应位于图下方并以x标签。这样 plt.tight_layout() 也可以看到整个标签并进行相应的调整。
    • 这应该是公认的答案。另请注意,它适用于 Python 字符串格式,例如r"$\alpha$ : {0} " "\n" r"$\beta$ : {1}".format(a, b)
    【解决方案2】:

    您的示例正是它的完成方式,您使用\n。你需要去掉 r 前缀,所以 python 不会将它视为原始字符串

    【讨论】:

    • 您可能希望主动双重转义 LaTeX 命令以确保它们不会被 Python 解释:xlabel('$\\Sigma$')
    • 这个答案不正确。您要么在普通字符串中双重转义乳胶``(无 r)您遵循@EOLs answer
    • 关于居中:ylabel('this is vertical\ntest', multialignment='center') from matplotlib.org/examples/pylab_examples/multiline.html
    • 不幸的是,没有一个建议的解决方案适用于选项rcParams["text.usetex"] = True
    【解决方案3】:
    plt.bar([1, 2], [4, 5])
    plt.xlabel("My x label")
    plt.ylabel(r"My long label with $\Sigma_{C}$ math" + "\n" + "continues here")
    

    只需使用非原始字符串形式的换行符连接字符串即可。

    【讨论】:

      【解决方案4】:

      以下 matplotlib python 脚本使用新行创建文本

      ax.text(10, 70, 'shock size \n $n-n_{fd}$')
      

      以下没有换行。注意文本前面的 r

      ax.text(10, 70, r'shock size \n $n-n_{fd}$')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多