Matplotlib 1.3.1 中的数学表达式
我正在尝试在 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
Matplotlib 网站提到,任何被 $
和 \
包围的内容都应该能给我想要的表达式。他们的一个例子是 $\alpha$,这会显示“数学”中的 alpha。
有没有人能告诉我如何在我的标签中写 \xi?
编辑:我已经发布了完整的 plt 代码和完整的追踪信息。
3 个回答
你可以用反斜杠 \ 来转义这个字符,这样它就不会被当作转义字符 \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')
在Python中,有些反斜杠组合是有特殊含义的。为了避免这种情况,你可以使用原始字符串(raw strings)。另外,你应该只使用一对$
符号,因为它只代表一个表达式:
r'$\xi(r)\ M_{200}>13.4$'
这意味着“把字符串里面的内容当作字面意思来处理”。在涉及LaTeX表达式时,使用原始字符串是个好主意。
需要注意的是,输出结果是一个普通字符串,r
只是告诉解析器不要使用转义字符。
另外,在LaTeX中,空格是用\
(斜杠加空格)来表示的。
编辑
现在你已经发布了你的表达式,我可以告诉你每个表达式的问题所在:
'$\xi$(r) M$_{200}$>13.4'
:这里有多个$
,你应该只用一个。见上面的说明。'fit M200>13.4'
:这里没有LaTeX,但应该写成r'$\mathrm{fit}\ M200>13.4$'
'r$_0$ = %g' % p1_1
:r
应该放在外面,而$
要包裹整个表达式。应该是r'$r_0 = %g$' % p1_1
'$\gamma$ = %g' % p1_2
:和上面一样,只用一对$
包裹整个表达式:r'$\gamma = %g$' % p1_2
注意:从技术上讲,你可以混合使用LaTeX和非LaTeX表达式,但这样容易出错,因为你可能会漏掉分隔符,而且看起来也不太美观。
在使用matplotlib绘制数学文本时,你需要用原始字符串,而不是普通字符串。在普通字符串中,\
被用作转义字符,比如\n
表示换行。
把你的字符串转换成原始字符串很简单,你会发现matplotlib的例子在字符串前面加了一个r
,比如r'$\alpha$'
。
在你的情况下,你可以改成:
plt.scatter(np.log10(r1),np.log10(xi1),c='red',label=r'$\xi$(r) M$_{200}$>13.4')