【发布时间】:2018-03-01 15:21:02
【问题描述】:
我已经创建了一张地图,并且正在将经纬度坐标的 CSV 文件读入 Pandas DataFrame。在读取 DataFrame 后,我已经成功地使用“for”循环绘制了多个大弧线。
我现在正在尝试为多个大弧设置动画。动画的原因是在更新 CSV 时实时更新绘图。我最终会为 DataFrame 使用 SQL 表而不是 CSV,但我想先让动画部分工作。
我阅读并观看了有关 matplotlib 和动画的多个教程。我已阅读源文档并尝试应用多个示例。我已经能够成功地为单个大弧制作动画,但似乎无法将代码扩展到多个弧。
Edit1:我希望将文件中的所有大圆弧绘制在地图上(我已经完成了这部分工作)。当将一组新的纬度和经度添加到文件中时,我希望它在同一图中自动更新。我正在尝试将其用作实时显示。
**Edit2:我已经尽可能地对代码进行了配对。基本地图、数据框中的一些长/纬度坐标以及我对线条进行动画处理的尝试是最小的。我必须保留 CSV 输入,因为这是在 CSV 更新后验证地图是否更新的唯一方法。
CSV 包含以下内容:
sourcelon sourcelat destlon destlat
50.44 30.51 -80.84 35.22
52.52 13.4 -80.84 35.22
43.18 -22.97 -80.84 35.22
35.18 -22.97 -80.84 35.22
正在绘制弧线,但在更新 CSV 时不会更新。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.animation
# create new figure, axes instances.
fig=plt.figure()
# setup mercator map projection.
plt.figure(figsize=(27, 20))
m = Basemap(projection='mill', lon_0=0)
m.drawcoastlines(color='r', linewidth=1.0)
def animate(i):
df = pd.read_csv('c:/python/scripts/test2.csv', sep='\s*,\s*',header=0, encoding='ascii', engine='python'); df
for x,y,z,w in zip(df['sourcelon'], df['sourcelat'], df['destlon'], df['destlat']):
line, = m.drawgreatcircle(x,y,z,w,color='r')
line, = plt.plot([],[])
ani = matplotlib.animation.FuncAnimation(fig, animate, interval=1000)
plt.tight_layout()
plt.show()
【问题讨论】:
-
您似乎在每次创建大圆时都在删除和删除它。就像
a = 5; del a; print(a)- 想知道为什么a不见了。 -
啊,不。情况更糟。你从来没有真正调用过
animate,所以x和y是未定义的。一般来说,阅读并理解minimal reproducible example,如果您在此处需要帮助,请在没有任何外部数据的情况下提供您的问题。 -
我试图模仿这里的例子link
-
我写了那个例子;但我不能在这里给出答案,因为我不知道你到底想做什么。数据似乎有几个轨迹,但最后你只使用其中一个。其他人应该怎么办?当然,在示例中,该行在动画开始之前 被删除。
-
明白,更新帖子以更清楚地说明问题。
标签: python pandas matplotlib updating