在matplotlib标题中偏移一个字符

时间:2015-04-28 18:32:56

标签: python matplotlib latex axis-labels tex

朋友,

我的绘图轴有七十个刻度,代表一个蛋白质序列。因为我不能在一行上放上那么多字母并且让它们清晰易读,所以我不得不错开它们,因此:

________________________________
P o A i I A o g e u n e f e t r
 l t x s s L n S q e c O L t e s

(实际数字在字母之间的空间要小得多,如果在一行上则完全重叠。)

我想用星号或其他东西来强调其中的某些:

________________________________
P o A i I A o g e u n e f e t r
 l t x s s L n S q e c O L t e s
*   *   * **   *       * *

但是当我使用简单的换行符在Matplotlib中渲染它时,星号的速度比它们需要的低:

xLabels = [
        ['', '\n'][i%2]
        +sequence[i] 
        +['\n', ''][i%2] 
        +'\n' 
        +decorations[i]  
    for i in range(len(sequence))]

我知道matplotlib在其标签中支持TeX,我知道我可以在LaTex中使用\ vspace {-1em}或者其他东西,但我不能让matplotlib服从我。它不断抛出解析错误,如下所示:

File "/usr/lib64/python3.3/site-packages/matplotlib/mathtext.py", line 2345, in parse
  str(err)]))
ValueError: 
$ $
^
Expected end of text (at char 0), (line:1, col:1)

(这是我尝试将装饰放在TeX数学模式中,希望添加一个上标。可能的复杂因素是许多装饰都是''。

所以,有了这个,我的问题是:有没有办法告诉matplotlib的文本渲染器将字符移动到换行符的一小部分?这需要简单自动化,因为整个程序将生成近四十个数字,每个数字都有不同的装饰。

1 个答案:

答案 0 :(得分:1)

  

...有没有办法告诉matplotlib的文本渲染器将字符移动到换行符的一小部分?

我认为你走在正确的轨道上。您可以通过以下Latex命令更改matplotlib中的垂直间距,您可以参考该命令;但是,我认为您希望使用xticks vs xlabel来处理多线条件。另外,请记住tex中的换行符为\\,而不是\n

import numpy as np
x = np.arange(0, 5, 0.1);
y = np.sin(x)
plt.plot(x, y)
plt.ylim(plt.ylim()[::-1])
plt.xlabel(r"first line \\ \vspace{0.5cm}small space \\ \vspace{2cm}{more space}",fontsize=22)
plt.show() 

enter image description here

另请参阅Text rendering With LaTeX