2014-06-19 70 views
0

我想在matplotlib.pyplot版本编写的数学表达式1.3.1的数学表达式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提到任何物品ing在$\之内应该给我所需的表达。他们的例子之一是$ \ alpha $,这给了他们“数学”阿尔法。

任何人都可以告诉我如何在我的标签中写入\ xi吗?

编辑:已经发布之全部PLT CODE和整个TRACEBACK

+0

您是否可以发布完整的追踪以及请?另外我假设你绘制同一行(plt.scatter)两次是编辑错误? – Ffisegydd

+0

好的。你可以请关闭你的ipython控制台并重新启动它?然后确保你运行的是正确的python文件,并且在所有包含TeX代码的字符串之前放置了'r'(我在你的代码中看到你已经把它放在一个中间(plt.text'中间) )而不是其他人)?只是担心它可能会被缓存或者其他的,而你仍然在运行旧的代码。 – Ffisegydd

+0

plt.text中的中间r实际上是r_0。正如我所提到的,我也试图去掉plt.text和plt.plot这两行来绘制它。但是它仍然说ValueError – ThePredator

回答

2

在Python,一些反斜线组合有特殊的含义。你可以避免使用原始字符串。此外,你应该用只有一双$,因为它只有一个表情:

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

这意味着“拿里面的字符串字面的一切”。始终使用涉及LaTeX表达式的原始字符串是一个好主意。

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

还注意到比在LaTeX中,空格由\(斜线 - 空格)表示。

编辑

现在你已经张贴你的表情,我可以告诉你,什么是错的每一个:

  • '$\xi$(r) M$_{200}$>13.4':几个$,您应该只有一个。往上看。
  • 'fit M200>13.4':这里没有乳胶,但它会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的表情,但它是容易出错,因为你可能会错过分隔符,而且看起来很丑。

+0

它仍然不起作用 – ThePredator

+0

@Srivatsan明白了,这是因为你正在使用几个美元符号。看到编辑的命令 – Davidmh

+0

这也行不通 – ThePredator

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') 
+0

我试过了你的编辑,它仍然说ValueError:invalid \ x escape – ThePredator

+0

是的我还有一个plot函数,它有label ='fit',即一个普通字符串 – ThePredator

+0

I也尝试删除所有的行,并只绘制plt.scatter。但是我仍然得到了Value错误 – ThePredator

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')