Визуализация TeX, фигурные скобки и синтаксис форматирования строк в matplotlib - PullRequest
15 голосов
/ 20 мая 2011

У меня есть следующие строки для визуализации аннотаций TeX на моем matplotlib графике:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc

rc('text', usetex=True)
rc('font', family='serif')

voltage = 220

notes = r"\noindent $V_2 = {0:.5} V$".format(voltage)

plt.annotate(notes, xy=(5,5), xytext=(7,7))
plt.show()

Это отлично работает, но мой первый придирка в том, что V - это единица измерения, поэтому онабыть в текстовом режиме, вместо (курсивом) математического режима.Я пробую следующую строку:

notes = r"\noindent $V_2 = {0:.5} \text{V}$".format(voltage)

Это вызывает ошибку, потому что { фигурные скобки } являются собственностью синтаксиса форматирования строки Python.В приведенной выше строке только {0:.5} является правильным;{V} рассматривается как незнакомец.Например:

s1 = "Hello"
s2 = "World!"
print "Some string {0} {1}".format(s1, s2)

должен дать Some string Hello World!.

Как мне убедиться, что { фигурные скобки TeX } не мешают { фигурным скобкам Python } * * 1023

Ответы [ 2 ]

21 голосов
/ 20 мая 2011

Вы должны удвоить скобки, чтобы обращаться буквально:

r"\noindent $V_2 = {0:.5} \text{{V}}$".format(voltage)

Кстати, вы также можете написать

\text V

, но лучше всего это

\mathrm V

поскольку единица на самом деле не является текстовым символом.

6 голосов
/ 20 мая 2011

Вы двойно-фигурные скобки их:

>>> print '{{asd}} {0}'.format('foo')
{asd} foo
...