Matplotlib中的数学表达式1.3.1

时间:2014-06-19 12:42:56

标签: python syntax matplotlib

我试图在matplotlib.pyplot版本1.3.1

中编写数学表达式
>>> import matplotlib
>>> print matplotlib.__version__
    1.3.1

不起作用的代码片段是

plt.scatter(np.log10(r1),np.log10(xi1),c='red',label='$\xi$(r) M$_{200}$>13.4')
plt.plot(np.log10(r1),np.log10(curve_y_1),'--',label='fit M200>13.4')

plt.text(0.5,-1.6,'0.0<z<1.0',fontsize=15,color='c')
plt.text(0.5,-1.8,'r$_0$ = %g' % p1_1,fontsize=13,color='r')
plt.text(0.5,-2.0,'$\gamma$ = %g' % p1_2,fontsize=13,color='r')

错误的整个追溯是:

In [55]: %run correlation_fit_compare.py
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
    202             else:
    203                 filename = fname
--> 204             __builtin__.execfile(filename, *where)

ValueError: invalid \x escape

Matplotib website提到$\中包含的任何内容都应该为我提供所需的表达式。他们的一个例子是$ \ alpha $,它给了他们“数学”alpha。

有谁能告诉我如何在我的标签上写\ xi?

编辑:已经发布了整个问题代码和整个跟踪

3 个答案:

答案 0 :(得分:4)

在matplotlib中使用数学文本时,必须使用原始字符串而不是标准字符串。在标准字符串中,\用作转义字符,例如代表新行的\n

要将字符串转换为原始字符串很简单,您会注意到matplotlib示例在字符串开头之前放置r,例如r'$\alpha$'

在您的情况下,您可以将其更改为:

plt.scatter(np.log10(r1),np.log10(xi1),c='red',label=r'$\xi$(r) M$_{200}$>13.4')

答案 1 :(得分:2)

在Python中,一些反斜杠组合具有特殊含义。你可以避免使用原始字符串。此外,您应该只使用一对$,因为它只有一个表达式:

r'$\xi(r)\ M_{200}>13.4$'

这意味着&#34;将字符串中的所有内容按字面意思&#34;。总是使用涉及LaTeX表达式的原始字符串是个好主意。

请注意,输出是普通字符串,r只是告诉解析器不要使用转义字符。

另请注意,与LaTeX相比,空格由\(斜线空间)表示。

修改

现在你已经张贴了你的表情,我可以告诉你每个人的错误:

  • '$\xi$(r) M$_{200}$>13.4':多个$,您应该只有一个'fit M200>13.4'。见上文。
  • r'$\mathrm{fit}\ M200>13.4$':此处没有LaTeX,但它会是'r$_0$ = %g' % p1_1
  • r$应该在外面,r'$r_0 = %g$' % p1_1包含完整的表达式。 '$\gamma$ = %g' % p1_2
  • $:与上述相同,只使用一对包含完整表达式的r'$\gamma = %g$' % p1_2:{{1}}

注意: 从技术上讲,可以混合LaTeX而不是LaTeX表达式,但它容易出错,因为您可能会错过分隔符,看起来很难看。

答案 2 :(得分:1)

你可以转义字符\所以它不被解释为转义字符\ x,如下所示:

plt.scatter(np.log10(r1),np.log10(xi1),c='red',label='$\\xi$(r) M$_{200}$>13.4')

除非您在绘图中添加图例,否则绘图的参数标签实际上不会显示任何内容,因此您必须要调用:

plt.legend()

或者创建一个xlabel或ylabel而不是标记图:

plt.xlabel(label='$\\xi$(r) M$_{200}$>13.4')
plt.ylabel(label='$\\xi$(r) M$_{200}$>13.4')