我有一个matplotlib axes实例,我正在为一个AxesImage通过动画制作动画blit.
我想做的是为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)
Run Code Online (Sandbox Code Playgroud)
虽然我看到刻度线正确更新,但标签不是.我认为轴bbox不包括轴,这可能吗?如果是这样,我该如何设置它的动画?我应该从其他地方复制和恢复吗?
轴 bbox 不包含轴“内部”之外的任何内容(例如,它不包含刻度标签、标题等)
解决这个问题的一种快速方法是在位块传送时抓住图形的整个区域。(例如background = canvas.copy_from_bbox(fig.bbox))
如果您有多个子图并且只想对其中之一进行动画处理,这可能会导致问题。在这种情况下,您可以按照以下方式做一些事情background = canvas.copy_from_bbox(ax.bbox.expanded(1.1, 1.2))。不过,您必须猜测所需的比率。
如果您需要刻度标签的确切范围,那就有点棘手了。最简单的方法是迭代刻度标签对象并获得与 的并集ax.bbox。你可以把它变成一句单行话:ax.bbox.union([label.get_window_extent() for label in ax.get_xticklabels()])。
无论如何,我认为这三个选项之一应该可以满足您的需要。
| 归档时间: |
|
| 查看次数: |
3747 次 |
| 最近记录: |