Подтвердить что ты не робот

Python: Matplotlib аннотирует разрыв строки (с латексным и без него)

У меня есть очень простой вопрос: как сделать разрыв строки с matplotlib в python с помощью команды "annotate". Я попробовал "\" и "\n", но он не работает. И как это сделать для аннотации "Латекс" и для обычной текстовой аннотации?

Большое спасибо.

4b9b3361

Ответ 1

Что именно вы пробовали?

Вы случайно использовали исходную строку (например, r"whatever")?

'\n' работает отлично, но если вы используете необработанную строку, чтобы избежать последовательности латекс, интерпретируемой как побег, она будет интерпретироваться как python как '\' и '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

Ответ 2

Однако, если вам нужны оба варианта, рассмотрите следующий пример:

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

Ключ состоит в том, чтобы собрать строку заранее, используя +=. Таким образом, вы можете иметь команды raw-string (обозначенные r) и разрывы строк (\n) в той же аннотации.

Ответ 3

Вы можете использовать тройные кавычки, когда вы определяете строку аннотации, как в 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()

Я добавил несколько "дополнительных":

  • r вскоре перед открытием тройных цитат, чтобы облегчить интерпретатор LaTeX

  • двойные фигурные скобки {{}}, поэтому команда .format() и LaTeX не взаимодействуют друг с другом

  • параметр xycoords='axes fraction', поэтому, чтобы указать позицию строка с дробными значениями по ширине и высота участка
  • параметр backgroundcolor='w', который помещает белую шатер вокруг аннотация (удобно в случае совпадения с вашим сюжетом).

Полученный сюжет: введите описание изображения здесь

Ответ 4

Быстрые решения

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