使用 matplotlib 对带有标签的点进行动画处理

2024-02-09

我有一个带有线条的动画,现在我想标记这些点。 我试过plt.annotate()我尝试过plt.text()但标签不动。 这是我的示例代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def update_line(num, data, line):
    newData = np.array([[1+num,2+num/2,3,4-num/4,5+num],[7,4,9+num/3,2,3]])
    line.set_data(newData)
    plt.annotate('A0', xy=(newData[0][0],newData[1][0]))
    return line,


fig1 = plt.figure()

data = np.array([[1,2,3,4,5],[7,4,9,2,3]])
l, = plt.plot([], [], 'r-')
plt.xlim(0, 20)
plt.ylim(0, 20)
plt.annotate('A0', xy=(data[0][0], data[1][0]))
# plt.text( data[0][0], data[1][0], 'A0')

line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l),
    interval=200, blit=True)
plt.show()

你能帮我吗?

我的下一步是: 我有起源于这些点的向量。这些向量在每个动画步骤中改变它们的长度和方向。 我怎样才能使这些动画化?

没有动画,这可以工作:

soa =np.array( [ [data[0][0],data[1][0],F_A0[i][0][0],F_A0[i][1][0]],
               [data[0][1],data[1][1],F_B0[i][0][0],F_B0[i][1][0]],
               [data[0][2],data[1][2],F_D[i][0][0],F_D[i][1][0]] ])
X,Y,U,V = zip(*soa)
ax = plt.gca()
ax.quiver(X,Y,U,V,angles='xy',scale_units='xy',scale=1)

首先非常感谢您的快速且非常有帮助的回答!

我已经用这个解决了我的矢量动画问题:

annotation = ax.annotate("C0", xy=(data[0][2], data[1][2]), xycoords='data',
    xytext=(data[0][2]+1, data[1][2]+1), textcoords='data',
    arrowprops=dict(arrowstyle="->"))

在“更新功能”中我写道:

annotation.xytext = (newData[0][2], newData[1][2])
annotation.xy = (data[0][2]+num, data[1][2]+num)

更改向量的开始和结束位置(箭头)。

但是,当我有 100 个或更多向量时,又会怎样呢?写成这样是不切实际的:

annotation1 = ...
annotation2 = ...
    .
    :
annotation100 = ...

我尝试了一个列表:

...
annotation = [annotation1, annotation2, ... , annotation100]
...

def update(num):
    ...
    return line, annotation

并得到这个错误: AttributeError:“列表”对象没有属性“轴”

我能做些什么?你有什么想法吗?


我从这里来这个问题 https://stackoverflow.com/q/48674542/2454357,其中应更新使用两者的注释xy and xytext。看来,为了正确更新注释,需要设置属性 .xy的注释来设置注释点的位置并使用.set_position() method注释的位置来设置注释的位置。设置.xytext属性没有效果——在我看来有点令人困惑。下面是一个完整的例子:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

fig, ax = plt.subplots()

ax.set_xlim([-1,1])
ax.set_ylim([-1,1])

L = 50
theta = np.linspace(0,2*np.pi,L)
r = np.ones_like(theta)

x = r*np.cos(theta)
y = r*np.sin(theta)

line, = ax.plot(1,0, 'ro')

annotation = ax.annotate(
    'annotation', xy=(1,0), xytext=(-1,0),
    arrowprops = {'arrowstyle': "->"}
)

def update(i):

    new_x = x[i%L]
    new_y = y[i%L]
    line.set_data(new_x,new_y)

    ##annotation.xytext = (-new_x,-new_y) <-- does not work
    annotation.set_position((-new_x,-new_y))
    annotation.xy = (new_x,new_y)

    return line, annotation

ani = animation.FuncAnimation(
    fig, update, interval = 500, blit = False
)

plt.show()

结果看起来像这样:

如果版本很重要,此代码已在 Python 2.7 和 3.6 上使用 matplotlib 版本 2.1.1 进行了测试,并且在这两种情况下都设置.xytext没有效果,而.set_position() and .xy按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 matplotlib 对带有标签的点进行动画处理 的相关文章

随机推荐

  • 拖放文件属性为只读

    我创建了一个附加属性 它注册拖放事件并请求操作 移动 链接 复制 UIElement dragablecontrol d as UIElement if dragablecontrol null dragablecontrol AllowD
  • 本机 int 类型和 numpy.int 类型有什么区别?

    您能否帮助理解本机 int 类型和 numpy int32 或 numpy int64 类型之间的主要区别 如果有 有几个主要区别 首先 Python 整数的大小是灵活的 至少在 Python 3 x 中 这意味着它们可以增长以容纳任意数量
  • 使用Java从网页中提取数据?

    我正在尝试用 Java 编写我的第一个程序 目标是编写一个程序来浏览网站并为我下载文件 但是 我不知道如何使用Java与互联网交互 谁能告诉我要查找 阅读哪些主题或推荐一些好的资源 最简单的解决方案 不依赖于任何第三方库或平台 是创建一个指
  • 自定义元素是否有效 HTML5?

    我一直无法找到自定义标签在 HTML5 中是否有效的明确答案 如下所示
  • Google Drive API 与 iOS 使用应用程序服务帐户

    我正在致力于实现一个 iOS 应用程序 该应用程序将从 Google Drive 文档中提取内容 该文档对于每个客户来说都是相同的 并且与用户的 Google 帐户完全分开 我按照教程观看了有关如何将 SDK 用于 Xcode 项目的视频
  • 在 C# 中检查字符串是否仅包含数字的最快方法

    我知道如何检查字符串是否仅包含数字的几种方法 RegEx int parse tryparse 循环等 谁能告诉我什么fastest检查方法是 我只需要CHECK值 无需实际解析它 我所说的 数字 特指 ASCII 数字 0 1 2 3 4
  • Magento - 使用更新 XML 删除块

    如何使用布局 xml 文件删除已存在的块 具体来说 我想从名为 top switches 的块中删除名为 currency 的块 它被插入到directory xml 文件中 如下所示
  • 使用 LINQ,如何从列表中查找具有给定属性值的对象?

    我有一堂课叫Questions This Questions有属性QuestionID and QuestionAnswer 迭代此过程时List of Question在 foreach 中 我必须找到 QuestionID 12 如果我
  • Sqlite C++ 中的预准备语句如何工作

    我不知道如何在我的 Sqlite3 代码中实现准备好的语句 include
  • C# pinvoke 封送联合

    我在将 C Union 转换为 C 时遇到一些问题 这是联盟的定义 union Info char varChar 8 short varShort 4 int varInteger 2 float varFloat 2 double va
  • 无法在 Kivy 中查看 tiff 图像

    problem 我可以使用以下命令加载图片Image kivy 中的模块 但由于某种原因 我无法将 tif 文件加载到 kivy 中 当图像源为 pics lugia png 图像加载得很好 但如果来源是 pics snorlax tif
  • java 字段变化监听器

    所以我真的想要某种方法来检测某个对象的场变化 我用谷歌搜索了很长一段时间但没有找到任何东西 所以基本上我需要知道的是对象的某些变量何时发生变化 让我们以这个类为例 public class Example String text test
  • GWT 开发者模式代码服务器

    GWT 开发人员模式嵌入式 http 服务器对我来说很有意义 但我承认我不明白 代码服务器 是什么 让我印象深刻的是 一个 html 文件包含了浏览器在开发过程中使用处理 AJAX 的嵌入式 Jetty 服务器呈现 GWT 应用程序所需的所
  • 在 AngularJS 中使用 ng-repeat 过滤结果 6 到 10(共 100 个)

    我看到limitTo文档中的过滤器 这允许我限制前 5 个或后 5 个结果 但我想设置限制的开始位置 以便我可以显示第二组 5 个结果 有内置过滤器吗 从 Angular 1 4 0 开始 limitTo filter https docs
  • 如何修改子字符串?

    使用排序规则xxx german2 ci它治疗 and ue相同 是否有可能出现所有M nchen突出显示如下 输入示例 M nchen can also be written as Muenchen 输出示例 b M nchen b ca
  • Git - 递归删除文件扩展名

    我试图递归地删除文件扩展名 但无论我尝试什么 它都会失败 谢谢你的任何想法 ubuntu ubuntu laptop hh hh sdk src uboot hh git rm r cached o fatal pathspec src u
  • DirectShow 与 Media Foundation 进行视频捕捉?

    我正在尝试在视频捕获 监控 流媒体应用程序的这两个 API 之间进行选择 但我不确定哪个是最佳选择 一些背景知识 我需要它与各种视频采集卡 适配器一起使用 该应用程序可能会用 C 开发 因此本机 API 至关重要 性能很重要 因为我需要处理
  • 如何检查密码重置令牌是否已过期?

    我正在使用 ASP NET Identity 并且具有基本的忘记密码 重置密码功能 当您填写忘记密码的表单时 它会使用以下命令创建一个重置令牌 userManager GeneratePasswordResetTokenAsync user
  • 为什么 CoreBluetooth 一次又一次地发现相同的外设?

    我已经在 StackOverflow 上查看了类似的问题 但它们都处理由于收到扫描响应数据而对 CBManager 委托的 didDiscover 方法进行第二次调用 我的情况有所不同 我坐在家里的办公桌前 我的应用程序在 iPhone 6
  • 使用 matplotlib 对带有标签的点进行动画处理

    我有一个带有线条的动画 现在我想标记这些点 我试过plt annotate 我尝试过plt text 但标签不动 这是我的示例代码 import numpy as np import matplotlib pyplot as plt imp