python - Matplotlib 动画多个大圆圈并从 pandas df 更新

标签 python pandas matplotlib updating

我创建了一张 map ,我正在将经纬度坐标的 CSV 文件读入 Pandas DataFrame。在读取 DataFrame 后,我已经成功地使用“for”循环绘制了多个大弧线。

我现在正在尝试为多个大弧线制作动画。动画的原因是在更新 CSV 时实时更新绘图。我最终将为 DataFrame 使用 SQL 表而不是 CSV,但我想先让动画部分工作。

我阅读并观看了多个关于 matplotlib 和动画的教程。我已阅读源文档并尝试应用多个示例。我已经能够成功地为单个伟大的弧线制作动画,但似乎无法将代码扩展到多个弧线。

编辑 1:我希望将文件中的所有大圆弧都绘制在 map 上(我已经让这部分工作了)。当一组新的纬度和经度添加到文件中时,我希望它在同一图中自动​​更新。我正在尝试将其用作实时显示。

**Edit2:我已经尽可能地配对代码。它是最小的基本 map ,数据框中的一些长/纬度坐标以及我对线条进行动画处理的尝试。我必须保留 CSV 输入,因为这是验证 CSV 更新后 map 是否更新的唯一方法。

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()

最佳答案

我回答了我自己的问题。当我将坐标添加到 CSV 时,我能够更新 map 。但是,我无法删除它们。我也会努力解决这个问题。

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.animation


# setup mercator map projection.
fig = 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')



ani = matplotlib.animation.FuncAnimation(fig, animate, interval=100)
plt.tight_layout()
plt.show()

关于python - Matplotlib 动画多个大圆圈并从 pandas df 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49052907/

相关文章:

python - Panda-Column 作为 numpy 数组的索引

python - 如何叠加 Pandas 图、matplotlib 图和轴

python - 维基百科抓取 - 需要帮助来构建它

python - 在 matplotlib 蜡烛图上注释某些内容

python - 如何在不使用 mpl.rc() 的情况下更改 matplotlib 补丁字体大小

python - 将行的最后一个元素与 pandas 中的行的其余部分进行比较

python - statsmodels.tsa._STL.STL "Unable to determine period from endog"

python - Seaborn pairplot 和 NaN 值

预期缩进时 Python 空语句或空语句

Python:在 super 方法调用中调用子类的方法