Инструменты и интерактивные функции Matplotlib


Matplotlib 参考文档Справочная документация Matplotlib

Этот набор функций обеспечивает обработку событий, операции со свойствами, взаимодействие с мышью и инструменты отладки.

Обзор функций

ФункцияОписание
connect()Привязать функцию обратного вызова события
disconnect()Отвязать функцию обратного вызова события
ginput()Получение координат по щелчку мыши
waitforbuttonpress()Ожидать нажатия мыши или клавиатуры
findobj()Найти Artist, соответствующий условиям
get() / setp()Получить/установить свойства Artist
getp()Получить свойства Artist (псевдоним для get)
get_current_fig_manager()Получить текущий менеджер Figure
new_figure_manager()Создать менеджер для Figure
set_loglevel()Установить уровень логирования
xkcd()Переключиться на рукописный комиксный стиль xkcd

Обработка событий — connect() / disconnect()

matplotlib.pyplot.connect(s, func)
matplotlib.pyplot.disconnect(cid)

Пример

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(np.random.randn(50).cumsum())
ax.set_title('Щёлкните в любом месте на графике')

# Обратный вызов события щелчка
def on_click(event):
    print(f'Клик в: x={event.xdata:.2f}, y={event.ydata:.2f}')

# Привязать событие
cid = fig.canvas.mpl_connect('button_press_event', on_click)

plt.show()
print("пример: события кликов зарегистрированы")

ginput() - Выбор координат мышью

matplotlib.pyplot.ginput(n=1, timeout=30, show_clicks=True,
    mouse_add=MouseButton.LEFT, mouse_pop=MouseButton.RIGHT,
    mouse_stop=MouseButton.MIDDLE)

Пример

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(7, 5))
ax.plot(np.arange(10), np.random.randn(10), 'o-')
ax.set_title('Щёлкните 3 точки (timeout=15s)')
ax.set_xlim(-1, 10)
ax.set_ylim(-3, 3)
ax.grid(True, alpha=0.3)

print("Пожалуйста, щёлкните 3 точки...")
points = plt.ginput(3, timeout=15, show_clicks=True)

for i, (x, y) in enumerate(points):
    print(f"Точка {i+1}: ({x:.2f}, {y:.2f})")

plt.show()

waitforbuttonpress() - Ожидание нажатия клавиши

matplotlib.pyplot.waitforbuttonpress(timeout=-1)

Возвращаемое значение: True означает, что была нажата клавиша, False означает, что была нажата кнопка мыши.

Пример

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10, 100)))
ax.set_title('Нажмите любую клавишу или щёлкните мышью')

print("Ожидание нажатия кнопки...")
result = plt.waitforbuttonpress(timeout=10)
if result is None:
    print("Тайм-аут!")
elif result:
    print("Клавиша была нажата")
else:
    print("Мышь была нажата")

plt.show()

findobj() - Найти Artist

matplotlib.pyplot.findobj(o=None, match=None, include_self=False)

Пример

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.lines import Line2D

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6], label='Линия A')
ax.plot([1, 2, 3], [1, 2, 3], label='Линия B')
ax.set_title('Демонстрация поиска объектов')

# Найти все объекты Line2D
lines = ax.findobj(match=Line2D)
print(f"Найдено {len(lines)} объектов-линий")

# Получить конкретные свойства
for line in lines:
    print(f" - подпись: {line.get_label()}")

# Используйте get() для получения свойств
ax_title = ax.get_title()
print(f"Заголовок осей: {ax_title}")

plt.show()
Found 2 line objects
  - label: Line A
  - label: Line B
Axes title: Find Objects Demo

get() / setp() - Операции со свойствами

matplotlib.pyplot.get(obj, *args, **kwargs)
matplotlib.pyplot.setp(obj, *args, **kwargs)
matplotlib.pyplot.getp(obj, *args, **kwargs)

Пример

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(layout='constrained')
line, = ax.plot([0, 1], [0, 1], label='тест')

# get() получает одно свойство
print("цвет линии:", plt.get(line, 'color'))

# getp() получает несколько свойств
props = plt.getp(line)
print(f"линия имеет {len(props)} свойств")

# setp() устанавливает несколько свойств одновременно
plt.setp(line, color='red', linewidth=3, linestyle='--')

ax.set_title('демонстрация setp()')
ax.legend()
plt.show()
print("пример: свойства изменены с помощью setp()")

xkcd() - Стиль комикса, нарисованного от руки

matplotlib.pyplot.xkcd(scale=1, length=100, randomness=2)

Пример

import matplotlib.pyplot as plt
import numpy as np

# Включить стиль xkcd, нарисованный от руки
with plt.xkcd():
    fig, ax = plt.subplots(figsize=(8, 5))
    x = np.linspace(0, 10, 100)
    ax.plot(x, np.sin(x), label='sin(x)')
    ax.plot(x, np.cos(x), label='cos(x)')
    ax.set_title('График в стиле XKCD')
    ax.set_xlabel('Время')
    ax.set_ylabel('Амплитуда')
    ax.legend()
    ax.annotate('Это пик!',
                xy=(np.pi/2, 1), xytext=(2, 1.3),
                arrowprops=dict(arrowstyle='->'))
    plt.show()
    print("пример: отображён стиль xkcd")

set_loglevel() - Уровень логирования

matplotlib.pyplot.set_loglevel(level)

варианты уровня: 'debug', 'info', 'warning', 'error', 'critical'.

Пример

import matplotlib.pyplot as plt
import numpy as np

# Установите уровень логирования в info (просмотр внутренней информации Matplotlib)
plt.set_loglevel('info')

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Отладка с loglevel')

plt.show()

Matplotlib 参考文档Справочная документация Matplotlib

Другие расширения