2012-02-12 90 views
9

对于我的大多数与matplotlib的交互式绘图,我不想使用乳胶处理数学。 (主要是因为它太慢了,但也是因为对于频繁使用恕我直言,这只是一点点模糊)。但是在编写胶乳时,我也一直使用自己的宏。仅举一个例子,而不是像$M_{\odot}$那样定义$\Msun$。所以当使用matplotlib时,我倾向于自动地写后者,然后得到一个错误并且必须修复它。这只是一个特别简单的例子,我希望能够灵活地在我的论文和我的情节中重新定义一个宏,而不需要太多的工作。扩展matplotlib mathtext分析器

那么,有没有什么合理的方法可以扩展mathtext parser来理解像$\Msun$这样的东西?或者我会不得不破解mathtext.py或什么?

(我后退时被定义Msun为字符串r'M_{\odot}',所以我可以写的东西像r'$M = 10\,' + Msun + '$',但这是不愉快的,肯定不会是我了自动)

回答

4

宏不受matplotlib的mathtext支持,您必须编辑mathtext.py。也许最简单的做法是在将字符串传递给mathtext分析器之前进行自己的宏扩展,例如, text(x,y,expand(r'$M = \Msun$'))其中expand用它的含义代替了你自己的宏,如\Msun

+1

为了节省编写工作量,您可以创建自己的'文本'函数,它首先调用'expand',然后将结果传递给matplotlib的'文本'。现在你只需调用mike.text(x,y,'$ \ Msun $')或其他你喜欢的乳胶宏。 – Daan 2012-02-14 08:51:35

+0

是的,这应该工作。此外,因为我只是使用'ipython --pylab',我想我可以'del text',然后导入'mike.text',它将调用'matplotlib.pyplot.text' - 对于'xlabel'也是类似的, 'ylabel'等等(尽管我是一个蟒蛇新手,所以如果这很愚蠢,请纠正我。)谢谢! – Mike 2012-02-14 16:20:44

0

,您可以加入乳胶\newcommand s转换前导码,如下所示: Matplotlib latex working directory/search path

+0

但是,这是为了我特别不希望使用tex处理('rcParams ['text.usetex'] = False'),所以乳胶前导码不会被使用。 – Mike 2012-02-13 14:54:30