2015-04-28 5 views
2

Друзья,Смещение символа в подписях 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 

(Фактический показатель имеет гораздо меньше места между буквами, они полностью перекрываются, если на один линия)

Я хочу подчеркнуть некоторые из них из них, звездочками или что-то:.

________________________________ 
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 в своих ярлыках, и я знаю, что могу использовать \ vspace {-1em} или что-то в LaTex, но я просто не могу получить 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 для перемещения персонажа на часть новой строки? Это должно быть простым для автоматизации, так как вся программа будет генерировать почти сорок цифр, каждый с потенциально разными украшениями.

+0

Я хотел бы начать работать с 'ax.text' функции:«Добавить текст в строке 's' оси в точке' x', ' y', координаты данных. " Поскольку он находится в координатах данных, получение правильного расположения по оси x будет непростым (повторное использование местоположений тика). Было бы неплохо иметь перевод с размера шрифта на y-height, но я уверен, вы можете добраться туда без излишней фузии. – cphlewis

ответ

1

... есть способ рассказать текстовому рендерингу matplotlib, чтобы переместить символ на часть новой строки?

Я думаю, что вы на правильном пути. Вы можете изменить вертикальный интервал в matplotlib с помощью следующей команды Latex, о которой вы указали; однако, я думаю, вы захотите работать с xticks против 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