Метка узла PyDot с нижним индексом

У меня есть прикрепленный код для отличного графика pydot, и я хотел бы, чтобы одна из меток имела индекс. Я пробовал следующее, но он просто отображает его как Y<SUB>2</SUB>. Как я могу получить его с подпиской?

import pydot

graph = pydot.Dot(graph_type='digraph', rankdir="LR")
# add node
graph.add_node(pydot.Node('X', label='X'))
graph.add_node(pydot.Node('Y', label='Y<SUB>2</SUB>'))

# add edege
graph.add_edge(pydot.Edge('X', 'Y'))
graph.write_png("mygraph.png")

person Tom Ron    schedule 14.05.2019    source источник


Ответы (2)


Если в вашей среде настроен LaTex, вы можете сделать это, используя разметку LaTex для своего графика. Вам нужно будет передать полученный график через LaTex, поэтому вам понадобится инструмент dot2tex https://dot2tex.readthedocs.io/en/latest/.

graph.add_node(pydot.Node('Y', label='$Y_{2}$'))
person Jon Guiton    schedule 14.05.2019
comment
К сожалению, похоже, что dot2tex экранирует все полезные символы, поэтому мы получаем код латекса, который выглядит следующим образом: [draw,ellipse] {\\$Y\_\\{2\\}\\$};\n - person Tobbey; 07.05.2020

Хотя для некоторых это могло быть очевидным, фактический ответ на вопрос может быть таким:

import dot2tex
import pydot

graph = pydot.Dot(graph_type='digraph', rankdir="LR")
# add node
graph.add_node(pydot.Node('X', label='X'))
#graph.add_node(pydot.Node('Y', label='Y<SUB>2</SUB>'))
graph.add_node(pydot.Node('Y', label='$$Y_{2}$$'))

# add edege
graph.add_edge(pydot.Edge('X', 'Y'))
#graph.write_png("mygraph.png")

# Export to tex
texcode = dot2tex.dot2tex(graph.to_string(),format='tikz',texmode='math',crop=True)
with open("test.tex", "w") as f: 
    f.write(texcode) 

Затем сгенерируйте pdf с

pdflatex ./test.tex
person Tobbey    schedule 07.05.2020