【问题标题】:Matplotlib animate objects with different markersMatplotlib 为具有不同标记的对象设置动画
【发布时间】:2023-03-08 02:09:01
【问题描述】:

我需要在matplotlib中做一个动画,我想绘制一个移动的粒子(作为一个点)和一条线(对应于它的速度的大小和方向)

我看过这个网站,有没有不同的动画例子。

https://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/

基本上他们在示例中所做的是将line 初始化为带有某些标记的图:

line, = ax.plot([], [], 'o')  # for points
line2, = ax.plot([], [], '-')  # for lines

animate 函数中,他们只是使用set_data 来更新下一帧的粒子位置 定义动画(i): line.set_data(x, y) 回线,

但是在示例中,它们要么使用线(例如:钟摆示例)要么使用点(盒子中的粒子示例),但不能同时使用两者。

如何先将粒子绘制为点,然后将速度矢量添加为线?

动画函数必须返回line,所以如果我使用lineline2,我需要一种方法来合并它们。

类似:

plot(x, y, 'o')                  # position
plot([x0, x1], [y0, y1], '-')  # speed

谢谢

【问题讨论】:

    标签: python animation matplotlib


    【解决方案1】:

    您可以定义两条“线”,一条由标记点组成,但中间没有线 (ls=""),另一条只有一条线但没有标记 (marker="")

    points, = ax.plot([1,2], [3,4], marker='o', ls="" )  # for points
    line,   = ax.plot([2,1], [4,3], marker="" , ls="-")  # for lines
    

    animate 函数将返回两个“行”:

    def animate(i):
        # x = ...; y = ...
        line.set_data(x, y)
        # x2 = ...; y2 = ...
        points.set_data(x2, y2)
        return points, line
    

    【讨论】:

    • 但是 animate 函数应该返回一个对象。如何合并两者?
    • 好吧,你必须返回两个,如更新的答案所示。
    • 我对这个答案感激不尽!我找不到任何方法来更改散点图中的标记。谢谢!
    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多