在绘图中渲染文本时,将格式字符串与上标和下标组合在一起

时间:2016-03-15 23:22:46

标签: matplotlib format

我想将我使用pyplot创建的“幂律”曲线的等式包括在内。我尝试了以下代码的几种变体:

ax.text(0.1,0.9,r'{0:}x$^{1:}$'.format(A,b))

当然文本渲染器使用大括号和格式语句。我试过将花括号加倍以便

ax.text(0.1,0.9,r'{0:}x$^{{1:}}$'.format(A,b))

甚至将它们增加三倍

ax.text(0.1,0.9,r'{0:}x$^{{{1:}}}$'.format(A,b))

我也尝试将文本分成两行

exponent = '{0:}$'.format(b)
ax.text(0.1,0.9,r'{0:}x$^'.format(A)+exponent)

这些对我或pyplot都没有意义,但我似乎无法提出正确的搜索问题来使其发挥作用。我找到了建议拆分线并使用双花括号的答案,但没有任何可以使这个工作。这可能吗?

编辑:

通过进一步的实验,我已经回答了上面的问题,这是我想在情节中加入的等式的简化版本,所以让我稍微改变一下这个问题。为了做我想做的事,我发现:

ax.text(0.1,0.9,r'{0:}x$^{{ {1:} }}$'.format(A,b))

的工作原理。我不知道为什么我没有早点尝试过,但我现在有。问题是我实际上也想要x上的下标。考虑到上述工作我会想到:

ax.text(0.1,0.9,r'{0:}x$^{{ {1:} }}_{{\rm map}}$ 

会起作用,但我收到以下错误:

  

下标/上标序列太长。使用大括号{}删除   歧义。 (在char 0),(line:1,col:1)

我看不到添加大括号的位置会消除任何歧义。谁能告诉我我需要做什么?

1 个答案:

答案 0 :(得分:1)

这有效:

ax.text(0.1, 0.9, r'${0:}x^{{{1:}}}_{{\rm map}}$'.format(A, b))

问题是您的x超出了数学模式($...$)。

关于双花括号,有一个简单的解释:当使用格式函数时,所有单花括号都与格式函数的参数匹配(它们也可以嵌套)。两个后续花括号是 定义的方式,在应用格式后获得一个花括号。有关详细信息,请参阅documentation