2014-06-19 106 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')