【发布时间】:2015-04-28 18:32:55
【问题描述】:
朋友们,
我有一个带有 70 个刻度的绘图轴,代表一个蛋白质序列。由于我无法在一行中放置那么多字母并使它们清晰易读,因此我必须错开它们,因此:
________________________________
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 的文本渲染器将字符移动到换行符的一小部分?这需要简单地自动化,因为整个程序将生成近四十个图形,每个图形都有可能不同的装饰。
【问题讨论】:
-
我将开始使用
ax.text函数:“将字符串s中的文本添加到坐标轴位置x、y、数据坐标。”由于它位于数据坐标中,因此获得正确的 x 轴位置并不难(重复使用刻度位置)。将字体大小转换为 y 高度会很不错,但我敢打赌,您可以在没有太多麻烦的情况下到达那里。
标签: python matplotlib latex axis-labels tex