web-dev-qa-db-ja.com

Python:Matplotlibが改行に注釈を付ける(ラテックスありとなし)

非常に基本的な質問があります。「annotate」コマンドを使用してpythonでmatplotlibを使用して改行する方法です。「\」と「\ n」を試しましたが、機能しません。そして「Latex」注釈と通常のテキスト注釈に対してこれを行う方法は?

どうもありがとうございました。

18
Vincent

正確に何を試しましたか?

たまたま、生の文字列を使用していましたか(例:r"whatever")?

'\n'は完全に機能しますが、ラテックスシーケンスがエスケープとして解釈されないように生の文字列を使用している場合は、python as '\'および'n'改行の代わりに。

例として:

import matplotlib.pyplot as plt

plt.annotate('Testing\nThis\nOut', xy=(0.5, 0.5))

plt.show()

enter image description here

一方、生の文字列を使用する場合:

import matplotlib.pyplot as plt

plt.annotate(r'Testing\nThis\nOut', xy=(0.5, 0.5))

plt.show()

enter image description here

15
Joe Kington

ただし、両方が必要な場合は、次の例を検討してください。

import matplotlib.pyplot as plt

a = 1.23
b = 4.56

annotation_string = r"Need 1$^\mathsf{st}$ value here = %.2f" % (a) 
annotation_string += "\n"
annotation_string += r"Need 2$^\mathsf{nd}$ value here = %.2f" % (b)

plt.annotate(annotation_string, xy=(0.5, 0.5))

plt.show()

それはあなたに与えます:

enter image description here

重要なのは、+=を使用して事前に文字列を組み立てることです。そうすれば、生の文字列コマンド(rで示される)と改行(\n)を同じアノテーションに含めることができます。

11
Schorsch

_string="""some text"""_のように、注釈文字列を定義するときに三重引用符を使用できます。これにより、文字列に入力した実際の改行は、出力の改行として解釈されます。これは、ラテックスと、コードの他の部分からのいくつかの数値パラメーターの印刷を含む例です。

_import matplotlib.pyplot as plt

I = 100
T = 20

annotation_string = r"""The function plotted is:
$f(x) \ = \ \frac{{I}}{{2}} \cos\left(2 \pi \ \frac{{x}}{{T}}\right)$ 

where:
$I = ${0}
$T = ${1}""".format(I, T)

plt.annotate(annotation_string, xy=(0.05, 0.60), xycoords='axes fraction',
                                             backgroundcolor='w', fontsize=14)

plt.show()
_

私はいくつかの「エクストラ」を追加しました:

  • laTeXインタープリターを容易にするために、開始トリプル引用符の直前のr

  • 二重中括弧_{{}}_。これにより、.format()コマンドとLaTeXが互いに混乱しなくなります。

  • _xycoords='axes fraction'_オプション。プロットの幅と高さに関して小数値で文字列の位置を指定します。
  • 注釈の周りに白いマーキーを配置する_backgroundcolor='w'_オプション(プロットと重複する場合に便利)

得られたプロットはこれです: enter image description here

7
Fabio

クイックソリューション

plt.annotate("I am \n"+r"$\frac{1}{2}$"+"\n in latex math environment", xy=(0.5, 0.5))

2
Ankit Kumar