我正在尝试使我在Python中执行的某些绘图任务自动化,其中之一需要使用方矩阵来注释绘图。矩阵的行号可能会更改。 我正在尝试使用Latex和Matplotlib来执行此操作,但是无法获取有效的Latex字符串:
import numpy as np
import matplotlib.pyplot as plt
#Number of rows of matrix
N=4
#create what I believe to be the valid Latex instruction:
beginning="$ \\left( \\begin{array}{"
formatting=N*'c'+'}\n'
array_rows=(N-1)*((N-1)*'%f & '+'%f \\\\\n')
final_row=(N-1)*'%f & '+'%f '
end="\\end{array} \\right) $"
matrix=beginning+formatting+array_rows+final_row+end
#generate some random values for the matrix and put them in a flat tuple
a=np.random.randn(N,N)
vals=tuple(a.flatten())
#attempt to annotate a plot:
fig,ax=plt.subplots(1)
ax.annotate(matrix % vals,(0.2,0.2))
'print(matrix)'返回:
$ \left( \begin{array}{cccc}
%f & %f & %f & %f \\
%f & %f & %f & %f \\
%f & %f & %f & %f \\
%f & %f & %f & %f \end{array} \right) $
这是我期望的,但是'ax.annotate(matrix%vals,(0.2,0.2))'返回:
'RuntimeError: latex was not able to process the following string:
b'$ \\\\left( \\\\begin{array}{cccc}0.587986 & -0.670847 & 1.424638 & 1.416569 \\\\1.961583 & 2.134095 & 0.296239 & -0.737057 \\\\0.311355 & 0.018828 & 0.031258 & -1.443867 \\\\0.964141 & 0.686492 & -1.367708 & -1.353436\\\\end{array} \\right) $''
'! Undefined control sequence.
l.13 ...87986 & -0.670847 & 1.424638 & 1.416569 \1.961583 & 2.134095
& 0.296...'
尽管似乎与反斜杠有关,但我无法弄清楚问题出在哪里。
答案 0 :(得分:2)
您可以通过在每个字符串前面添加一个r
字符来解决,这会将字符串转换为字节字符串,然后可由LaTex解析并正确呈现矩阵。这确实意味着字符串必须为 verbatim LaTex语法,请考虑以下示例
import numpy as np
import matplotlib.pyplot as plt
N=4
beginning=r"$ \left( \begin{array}{"
formatting=N*r'c'+r'}'
array_rows=(N-1)*((N-1)*r'%f & '+r'%f \\')
final_row=(N-1)*r'%f & '+r'%f '
end=r"\end{array} \right) $"
matrix=beginning+formatting+array_rows+final_row+end
a=np.random.randn(N,N)
vals=tuple(a.flatten())
fig,ax=plt.subplots(1)
ax.annotate(matrix % vals,(0.2,0.2))
如果您尝试使用print matrix
,这的确会使语法格式有些讨厌,因为\n
字符必须解析为\\
才能从输入中去除。但是,已编译的LaTex批注将是正确的。