Рубрики
Без рубрики

Text и Annotate Matplotlib – простое руководство

Вы хотели бы добавить текст на свой сюжет, возможно, чтобы объяснить выбросы или точки метки. Текстовый метод Matplotlib позволяет добавлять текст в качестве указанных координат. Но если вы хотите, чтобы текст ссылался на конкретную точку, но вы не хотите, чтобы текст был сосредоточен на этой точке? Часто вы хотите текст слегка … MATPLOTLIB Текст и Annotate – простое руководство Подробнее »

Автор оригинала: Lukas Halim.

Вы хотели бы добавить текст на свой сюжет, возможно, чтобы объяснить выбросы или точки метки. Матплотлиб Текстовый метод позволяет добавлять текст в качестве указанных координат. Но если вы хотите, чтобы текст ссылался на конкретную точку, но вы не хотите, чтобы текст был сосредоточен на этой точке? Часто вы хотите текст немного ниже или выше точки, это маркировка. В этой ситуации вы хотите Аннотировать метод. С Annotate мы можем указать оба точки, которую мы хотим маркировать, и положение для метки.

Пример основного текстового метода

Начнем с примера первой ситуации – мы просто хотим добавить текст в определенную точку на нашем сюжете. Текстовый метод будет размещать текст в любом месте, который вы хотели бы на сюжете, или даже разместить текст за графиком. После оператора импорта мы передаем необходимые параметры – координаты X и Y и текст.

import matplotlib.pyplot as plt

x, y, text = .5, .5, "text on plot"

fig, ax = plt.subplots()
ax.text(x, y, text)
x, y, text = 1.3, .5, "text outside plot"
ax.text(x, y, text)
Text(1.3, 0.5, 'text outside plot')

Изменение размера шрифта и Цвет шрифта

Мы можем настроить текстовое положение и формат с использованием дополнительных параметров. Сам шрифт может быть настроен с использованием либо Fontdict объект или с отдельными параметрами.

x, y, text = .3, .5, "formatted with fontdict"
fontdict = {'family': 'serif', 'weight': 'bold', 'size': 16, 'color' : 'green'}
fig, ax = plt.subplots()
ax.text(x, y, text, fontdict=fontdict)
x, y, text = .2, .2, "formatted with individual parameters"
ax.text(x, y, text, fontsize = 12, color = 'red', fontstyle = 'italic')
Text(0.2, 0.2, 'formatted with individual parameters')

Как изменить текстовое выравнивание?

Мы указываем XY Координаты для текста, но, конечно, текст не может поместиться на одну точку. Итак, текст сосредоточен на точке или является первой буквой в тексте, расположенном на этой точке? Давайте посмотрим.

fig, ax = plt.subplots()
ax.set_title("Different horizonal alignment options when x = .5")
ax.text(.5, .8, 'ha left', fontsize = 12, color = 'red', ha = 'left')
ax.text(.5, .6, 'ha right', fontsize = 12, color = 'green', ha = 'right')
ax.text(.5, .4, 'ha center', fontsize = 12, color = 'blue', ha = 'center')
ax.text(.5, .2, 'ha default', fontsize = 12)
Text(0.5, 0.2, 'ha default')

Текст оставлен горизонтальным, выровнен по умолчанию. Положения левого выравнивания Начало текста на указанных координатах. Центр выравнивания позиций середины текста на координатах XY. Правильное выравнивание положит конец текста на координатах.

Создание текстового поля

Fontdict Словарь Объект позволяет настроить шрифт. Точно так же, передавая Bbox Словарь объекта позволяет устанавливать свойства для коробки вокруг текста. Значения цвета от 0 до 1 определяют оттенок серого, с 0 быть полностью черным и 1 быть совершенно белым. Мы также можем использовать BoxStyle определить форму коробки. Если FaceColor слишком темно, он может быть осветлен, пробуя ценность альфа ближе к 0.

fig, ax = plt.subplots()
x, y, text = .5, .7, "Text in grey box with\nrectangular box corners."
ax.text(x, y, text,bbox={'facecolor': '.9', 'edgecolor':'blue', 'boxstyle':'square'})
x, y, text = .5, .5, "Text in blue box with\nrounded corners and alpha of .1."
ax.text(x, y, text,bbox={'facecolor': 'blue', 'edgecolor':'none', 'boxstyle':'round', 'alpha' : 0.05})
x, y, text = .1, .3, "Text in a circle.\nalpha of .5 darker\nthan alpha of .1"
ax.text(x, y, text,bbox={'facecolor': 'blue', 'edgecolor':'black', 'boxstyle':'circle', 'alpha' : 0.5})
Text(0.1, 0.3, 'Text in a circle.\nalpha of .5 darker\nthan alpha of .1')

Основной пример метода аннотата

Как мы сказали ранее, часто вы хотите, чтобы текст был ниже или выше точки, это маркировка. Мы могли бы сделать это с помощью текстового метода, но Annotate облегчает размещение текста относительно точки. Метод Annotate позволяет указывать две пары координат. Одна координата XY определяет точку, которую мы хотим маркировать. Еще одна координата XY определяет положение самой марки. Например, здесь мы замышляем о пункте (.5, 0,5), но поставили аннотацию немного выше, по адресу (.5, 0503).

fig, ax = plt.subplots()
x, y, annotation = .5, .5, "annotation"
ax.title.set_text = "Annotating point (.5,.5) with label located at (.5,.503)"
ax.scatter(x,y)
ax.annotate(annotation,xy=(x,y),xytext=(x,y+.003))
Text(0.5, 0.503, 'annotation')

Аннотировать со стрелкой

Хорошо, поэтому у нас есть точка в XY и аннотации в xytext Отказ Как мы можем подключить два? Можем ли мы нарисовать стрелку из аннотации до точки? Абсолютно! Что мы сделали с Annotate до сих пор выглядит так же, как если бы мы только использовали текстовый метод, чтобы поставить точку на (.5, 0503). Но Annotate также может нарисовать стрелку, соединяющую этикетку до точки. Стрелка стиль, передавая словарь на arrowproops. .

fig, ax = plt.subplots()
x, y, annotation = .5, .5, "annotation"
ax.scatter(x,y)
ax.annotate(annotation,xy=(x,y),xytext=(x,y+.003),arrowprops={'arrowstyle' : 'simple'})
Text(0.5, 0.503, 'annotation')

Регулировка длины стрелки

Это выглядит немного странно, чтобы стрелка коснулась точки. Как мы можем получить стрелу близко к точке, но не совсем прикоснуться? Опять же, варианты укладки передаются в словаре объектом. Большие значения от Shrinka переместит хвост дальше от этикетки и больших значений Shrinkb переместит голову дальше от точки. По умолчанию для Shrinka и Shrinkb это 2, так, установив посадка до 5 мы двигаем голову стрелки дальше с точки.

fig, ax = plt.subplots()
x, y, annotation = .5, .5, "annotation"
ax.scatter(x,y)
ax.annotate(annotation,xy=(x,y),xytext=(x,y+.003),arrowprops={'arrowstyle' : 'simple', 'shrinkB' : 5})
Text(0.5, 0.503, 'annotation')

У методов аннотата и текста имеют такие же варианты стиля?

Да, все параметры, которые работают с текстом, также будут работать с Annotate. Так, например, мы можем поставить аннотацию в текстовое поле и установить FontStyle как курсив, так же, как мы сделали выше.

fig, ax = plt.subplots()
x, y, text = .5, .7, "Italic text in grey box with\nrectangular box corner\ndemonstrating that the\nformatting options\nthat work with text\nalso work with annotate."
ax.scatter(x,y)
ax.annotate(text, xy=(x,y),xytext=(x,y+.01)
            ,fontstyle = 'italic'
            ,bbox={'facecolor': '.9', 'edgecolor':'blue', 'boxstyle':'square', 'alpha' : 0.5}
            ,arrowprops={'arrowstyle' : 'simple', 'shrinkB' : 5})
Text(0.5, 0.71, 'Italic text in grey box with\nrectangular box corner\ndemonstrating that the\nformatting options\nthat work with text\nalso work with annotate.')

Есть ли какие-либо сокращения для стилизации стрелки?

Да, ArrowStyle Может использоваться вместо других клавиш стилей. Дополнительные варианты здесь в том числе «Факт» , «Простое» , '-' и '->' Отказ

fig, ax = plt.subplots()
x, y, annotation = .5, .5, "wedge style"
ax.scatter(x,y)
ax.annotate(annotation,xy=(x,y),xytext=(x,y+.01),arrowprops={'arrowstyle':'wedge'})
another_annotation = '- style'
ax.annotate(another_annotation,xy=(x,y),xytext=(x,y-.01),arrowprops={'arrowstyle':'-'})
Text(0.5, 0.49, '- style')

Как мы можем аннотировать все точки на графике разброса?

Сначала мы можем создать 15 тестовых точек со связанными этикетками. Затем петлю через точки и используйте метод Annotate в каждой точке, чтобы добавить метку.

import random
random.seed(2)

x = range(15)
y = [element * (2 + random.random()) for element in x]
n = ['label for ' + str(i) for i in x]

fig, ax = plt.subplots()
ax.scatter(x, y)

texts = []
for i, txt in enumerate(n):
    ax.annotate(txt, xy=(x[i], y[i]), xytext=(x[i],y[i]+.3))

Обращение с перекрывающимися аннотациями

Аннотации перекрывают друг друга. Как мы мешаем этому? Вы могли бы вручную отрегулировать местоположение каждой этикетки, но это было бы очень много времени. К счастью, библиотека Python Настроить текст сделаю работу для нас. Вам придется Установка PIP Это сначала, и нам нужно будет хранить аннотации в списке, чтобы мы могли пройти их в качестве аргумента для readive_tex. т. т. Для этого мы видим, например, что «метка на 6» смещена налево, чтобы она больше не совпадала с «меткой 7».

from adjustText import adjust_text

fig, ax = plt.subplots()
ax.scatter(x, y)

texts = []
for i, txt in enumerate(n):
    texts.append(ax.annotate(txt, xy=(x[i], y[i]), xytext=(x[i],y[i]+.3)))
    
adjust_text(texts)
226

Заключение

Теперь вы должны иметь возможность позиционировать и форматировать текст и аннотации на ваших участках. Спасибо за прочтение! Пожалуйста, проверьте мою другую работу в INCURESTALKEAU , Powerbiskills. и DatascienceRILLS Отказ

Оригинал: “https://blog.finxter.com/matplotlib-text-and-annotate-a-simple-guide/”