友
我有71个蜱需要放在一个图上(它是一个蛋白质的序列)所以蜱需要交错,有些用星号突出显示:
________________________________
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.rc('text', usetex=True)
以便我可以向上移动星号(它们在轴上看得太远,除非我减少它们的\vspace
)
问题在于,交错不起作用,任何将空白放在标签顶部的尝试都会被LaTeX吃掉。这是最小的情况(使每个标签相同):
tickX = r'\noindent x\\\vspace{0.5cm}\\y\\ \vspace{-0.5cm}\\z'
这很好用,我得到了我想要的间距。但是,我只希望x
或y
出现在情节中,所以我\phantom
出了我不想要的那个:
tickX = r'\noindent \phantom{x}\\\vspace{0.5cm}\\y\\ \vspace{-0.5cm}\\z'
(在此示例中,tickX
的列表已提供给ax.set_xticklabels
。在实际代码中,每个刻度都不同。)
但是现在新线消失了,y
出现在x
s的位置!我找到了\vspace*{}
,但我也没有运气。我还尝试了\null
和\mbox{}
。
如果我放弃LaTeX并且只使用' \ny\nz'
,我会得到所需的行为,除了z
显得太低而且我回到了我开始的地方。
所以,我的问题是:如何在LaTeX处理的刻度标签顶部插入一个空行?或者,等效地,如何在LaTeX中创建一个可以在文档开头单独占用一行的幻像字符?
答案 0 :(得分:0)
好的,这是一个奇怪的。没有多少搜索导致matplotlib实际上在开头插入一个空格。所以,我在每个标签的顶部放了一个句号,因此:
________________________________
................................
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
* * * ** * * *
并在每个句点后插入\vspace
:
def xTickString(index, sequence, decorations):
ret = r"\noindent "
if(index % 2 == 0): #Put the tick at the top...
ret += r'.\\\vspace{29.1em}\\\makebox[0pt]{'
ret += sequence[index]
ret += r'}\\\vspace{0.2em}\\'
ret += '\makebox[0pt]{\**}' if decorations[index] == '*' else ''
else:
ret += r'.\\\vspace{30em}\\\makebox[0pt]{'
ret += sequence[index]
ret += r'}\\ \vspace{-0.7em}\\'
ret += '\makebox[0pt]{\**}' if decorations[index] == '*' else ''
return ret
当然使用`\ vspace {30em}时,时间段会出现在刻度线旁边,而实际标签会在页面外运行。因此,现在您在配置轴时相对于刻度线偏移了标签:
ax.tick_params(axis='x', pad=-494)
运行绘图顶部的句点并将标签放在正确的位置。
零宽度框使字母与标签中的星号保持一致,否则间距会变得不稳定。