【问题标题】:How can I plot the animation from the csv data with date time information?如何从带有日期时间信息的 csv 数据中绘制动画?
【发布时间】:2020-10-12 06:48:43
【问题描述】:

首先我想分享csv文件的数据。

date, total_cases, total_deaths
12-5-2020,6,2
13-5-2020,7,3
14-5-2020,10,2
15-5-2020,18,5

现在我想制作一个动画比较图,其中 x 轴将绘制为 dates,y 轴将绘制为 total_casestotal_deaths

from matplotlib import dates as mdate
from matplotlib import pyplot as plt
import matplotlib.animation as animation
import pandas as pd


m=pd.read_csv("covid-data.csv")


m['date']=pd.to_datetime(m['date'])
m.sort_values('date',inplace=True)

cdate=m['date']
ccase=m['total_cases']
cdeath=m['total_deaths']

fig = plt.figure()
ax1 = fig.add_subplot(111)

def animate(i):
    ax1.clear()
    ax1.plot(cdate,ccase)
    ax1.plot(cdate,cdeath)
            

ani = animation.FuncAnimation(fig, animate, interval=1000) 
plt.show()

现在 我无法获得我们想要的输出或动画。我该如何克服这个问题并找到解决方案?

对不起我的英语

【问题讨论】:

  • 随着动画的运行,你希望看到什么变化?

标签: python pandas csv matplotlib animation


【解决方案1】:

检查此代码:

from matplotlib import dates as mdate
from matplotlib import pyplot as plt
import matplotlib.animation as animation
import pandas as pd

m = pd.read_csv("covid-data.csv")

m['date'] = pd.to_datetime(m['date'], format = '%d-%m-%Y')
m.sort_values('date', inplace = True)

cdate = m['date']
ccase = m['total_cases']
cdeath = m['total_deaths']

fig = plt.figure()
ax1 = fig.add_subplot(111)

def animate(i):
    ax1.clear()
    ax1.plot(cdate[:i], ccase[:i], label = 'cases')
    ax1.plot(cdate[:i], cdeath[:i], label = 'deaths')
    ax1.legend(loc = 'upper left')
    ax1.set_xlim([cdate.iloc[0],
                  cdate.iloc[-1]])
    ax1.set_ylim([min(ccase.iloc[0], cdeath.iloc[0]),
                  max(ccase.iloc[-1], cdeath.iloc[-1])])
    ax1.xaxis.set_major_locator(mdate.DayLocator(interval = 5))
    ax1.xaxis.set_major_formatter(mdate.DateFormatter('%d-%m-%Y'))


ani = animation.FuncAnimation(fig, animate, interval = 1000)
plt.show()

我更改了您的animate 函数以使用i 计数器(每帧增加1)。您可以使用此计数器控制动画期间要更改的内容。我添加了一些格式以改善可视化。上面的代码给了我这个动画:

为了获得可观的动画,我在您提供的数据中添加了一些“假”数据,以便有更多的时间运行动画。用您的数据替换它们。


在错误的情况下

TypeError: 'builtin_function_or_method' object is not subscriptable

.iloc[0] 替换为[m.index[0]],将.iloc[-1] 替换为[m.index[-1]]。例如ccase.iloc[0] 变为ccase[m.index[0]]

【讨论】:

  • 非常感谢。对我帮助很大
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
相关资源
最近更新 更多