我试图在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?
编辑:已经发布了整个问题代码和整个跟踪
答案 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')