Анимация осей / тиков matplotlib - PullRequest
5 голосов
/ 10 июня 2011

У меня есть экземпляр matplotlib axes, внутри которого я анимирую AxesImage через blit ting.

Что я хотел бы сделать, так это анимировать тики на оси x. Я обновляю данные об AxesImage (и впоследствии), рисуя его художника довольно часто, и при каждом обновлении я хотел бы перемещать один дополнительный тик, чтобы выделить положение чего-либо. Вот что я сейчас делаю:

axis = axes.get_xaxis
im.set_data(new_data)
axis.set_ticks([10,20,30,x,t])
axis.set_ticklabels(["p", "u", "z", "z", "i"])
axes.draw_artist(im)
axes.draw_artist(axis)

Хотя я вижу, что галочки корректно обновляются, ярлыки нет. Я думаю, что оси Bbox не включает в себя оси, это возможно? Если так, как я могу оживить это? Должен ли я копировать и восстанавливать откуда-то еще?

1 Ответ

4 голосов
/ 10 июня 2011

Ось bbox не содержит ничего, кроме "внутри" осей (например, она не включает метки галочек, заголовок и т. Д.)

Один быстрый способ обойти это простозахватить всю область фигуры, когда ты блешь.(Например, background = canvas.copy_from_bbox(fig.bbox))

Это может вызвать проблемы, если у вас есть несколько вспомогательных сюжетов и вы хотите анимировать только один из них.В этом случае вы можете сделать что-то вроде background = canvas.copy_from_bbox(ax.bbox.expanded(1.1, 1.2)).Вы должны угадать, какие соотношения вам нужны.

Если вам нужен точный размер меток, это немного сложнее.Самый простой способ - перебрать объекты ticklabel и получить объединение с помощью ax.bbox.Вы можете сделать это однострочным: ax.bbox.union([label.get_window_extent() for label in ax.get_xticklabels()]).

В любом случае, я думаю, что один из этих трех вариантов должен делать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...