20170123

matplotlibのlatexで、行列とか書いて、つまずいた部分

書けないわけではない。

単純に、

import matplotlib.pyplot as plt

a= ur"$\begin{array}{ccc}a&a&a\\b&b&b\\c&c&c\end{array}$"
plt.text(0.5,0.5,a)
plt.show()

\begin{array}{ccc}a&a&a&\\b\b\b\\c\c\c\end{array}
^Unknown symbol: \begin

で止まる場合は、matplotlibが独自に使っているタイプセットに、その機能がついていないだけなので、自分のLaTeXシステムを使えば解決する。もちろん、自前でLaTeX環境は用意しなければならない。このサイトにも、自分が四苦八苦した記録が残っているかもしれない。(TeXLiveをISOでDLし、インストールする事をお勧めする。数百MBのダウンローダよりも、数GBのISOをDLした方が、トータルでかかる時間が絶対すくない。

解決策

from matplotlib import rcParams
rcParams['text.usetex'] = True

を実行するだけで、できる(ここを参考にした)。

そもそも、文字列が作れていない

SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in position : truncated \uXXXX

‘rawunicodeescape’コーデックは、\u〜〜〜〜って書いてある部分をデコード出来ない。

ur””とか、すでにいろいろつまづいて、工夫した人だと思いますが、
その工夫をした後、\uがあったら、pythonが読んでくれない事に、気を付けないといけない。

r"\usepackage{hoge}"+"\begin{..."

と、別々の文字列を、+で連結する形にしたら、エラーでなくなった。

\usepackage{amsmath}とか、入れてませんか?
入れるところ、ここじゃありませんよ。(後述するが、rcParamsから入れる。)

関連して日本語の空白も。

a= ur"$\begin{array}{ccc} a&a&a\\b&b&b\\c&c&c\end{array}$"

って、全角スペースを入れると、

UnicodeEncodeError: 'ascii' codec can't encode character u'\u3000' in position

ってエラーが返ってくる。\u3000’って、全角スペースですよ。
\uだから、だめらしい。

行列の書き方が間違っている

a&a&a&最後の&が余計

a= ur"$\begin{array}{ccc} a&a&a&\\b&b&b&\\c&c&c&\end{array}$"
! Extra alignment tab has been changed to \cr.

! LaTeX Error: Can be used only in preamble.

ここを参考にした。
\begin{document}
さっき間違えていた\usepackage{amsmath}がそれにあたる。
matplotlibでは、両方とも入れてはいけないらしい。

from matplotlib import rc
ParamsrcParams['text.usetex'] = True
rcParams['text.latex.preamble'] = r'\usepackage{amsmath}'

で入れるそうな。

$$\begin{array}{ccc}a&a&a\\b&b&b\\c&c&c\end{array}$$

posted by yuchan at 07:00 | Comment(0) | python
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: