2012-02-12 20 views
9

Matplotlib ile etkileşimli grafiğimin çoğunda, matematiğin lateks işlemlerini kullanmak istemiyorum. (Çoğunlukla çok yavaş olduğu için, aynı zamanda sık sık IMHO kullanımı için bu kadar az bulanık olduğu için). Ama lateks yazarken her zaman kendi makrolarımı kullanıyorum. Sadece bir örnek olarak, $M_{\odot}$ gibi bir şey yapmak yerine $\Msun$'u tanımlarım. Bu yüzden, matplotlib kullanırken, otomatik olarak otomatik olarak yazma eğilimim var ve sonra bir hata alıp düzeltmek zorundayım. Bu sadece basit bir örnektir ve kağıtlarımdaki ve makrolarımdaki bir makronun aynı anda çok fazla çalışma yapmadan bir makronun yeniden tanımlanma esnekliğine sahip olmak isterim.matplotlib mathtext ayrıştırıcısını genişletme

Yani, $\Msun$ gibi şeyleri anlamak için mathtext ayrıştırıcısını genişletebileceğim herhangi bir makul şekilde var mı? Ya da mathtext.py veya başka bir şeyi hacklemem gerekecek mi?

(My yedek r'M_{\odot}' yüzden r'$M = 10\,' + Msun + '$' gibi bir şey yazabilirsiniz dize olarak Msun tanımlayan, ancak bu hoş olmadığını ve kesinlikle benim için bir daha otomatik olmaz.)

cevap

4

Makrolar matplotlib en mathtext tarafından desteklenmeyen, sen mathtext.py düzenlemek gerekir. Belki de yapılması gereken en kolay şey, dizeyi mathtext ayrıştırıcısına iletmeden önce kendi makro genişletme işleminizi yapmaktır. text(x,y,expand(r'$M = \Msun$')), expand, kendi anlamı ile \Msun gibi kendi makrolarınızı değiştirir.

+1

Yazma çabasından tasarruf etmek için, önce 'genişletin' olarak adlandırılan ve daha sonra sonuçları matplotlib'in "metni" olarak geçiren kendi 'metin' işlevinizi oluşturabilirsiniz. Şimdi sadece mike.text (x, y, '$ \ Msun $') ya da hoşunuza giden başka bir lateks makrosunu arayın. – Daan

+0

Evet, bu işe yaramalı. Üstelik, sadece 'ipython --pylab' kullanıyorum, sanırım 'del metin' yapabilirim, sonra 'matplotlib.pyplot.text' olarak adlandırılacak' ve 'xlabel' için de' mike.text 'dosyasını içe aktarıyorum. ylabel, vb. (Ben bir python bülteniysem de, lütfen bu aptalca beni düzeltin.) Teşekkürler! – Mike

0

Sen \newcommand ler halinde lateks ekleyebilir burada gibi önsöz,: Matplotlib latex working directory/search path

+0

Ancak bu, özellikle tex işlemeyi kullanmak istediğimde ('rcParams ['text.usetex'] = False '), bu yüzden lateks başlangıcı kullanılmaz. – Mike