matplotlib.animation.FuncAnimation 分类数据的动画
Animation of categorical data with matplotlib.animation.FuncAnimation
我尝试使用 matplotlib.animation.FuncAnimation
对分类数据进行动画处理。但是,我还没有找到根据类别 table
为动画 x
y
值着色的方法。这是我的数据集 DF:
x y time table
0 150.0 126.0 0 Table3
1 160.0 244.0 0 Table1
2 153.0 126.0 1 Table3
3 159.0 244.0 1 Table1
4 154.0 131.0 2 Table3
5 161.0 243.0 2 Table1
6 149.0 131.0 3 Table3
7 158.0 244.0 3 Table1
8 394.0 247.0 4 Table4
9 150.0 128.0 4 Table3
10 161.0 243.0 4 Table1
11 160.0 244.0 5 Table1
12 154.0 130.0 5 Table3
13 153.0 129.0 6 Table3
14 163.0 237.0 6 Table1
15 134.0 128.0 7 Table3
16 162.0 238.0 7 Table1
17 162.0 237.0 8 Table1
18 162.0 240.0 9 Table1
19 163.0 239.0 10 Table1
20 164.0 239.0 11 Table1
21 165.0 239.0 12 Table1
22 266.0 195.0 13 Table2
23 163.0 240.0 13 Table1
24 165.0 239.0 14 Table1
25 164.0 239.0 15 Table1
26 165.0 239.0 16 Table1
27 165.0 240.0 17 Table1
28 394.0 259.0 17 Table4
29 151.0 129.0 18 Table3
有没有人建议如何根据 table
列为动画着色?我玩弄了这段代码,但还没有找到办法。感谢任何帮助!!
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
title = 'Occ'
x = np.array(df.x)
y = np.array(df.y)
occupancy = pd.DataFrame(y,x)
occupancy.columns = {title}
Writer = animation.writers['ffmpeg']
writer = Writer(fps=20, metadata=dict(artist='Me'), bitrate=1800)
fig = plt.figure(figsize=(12,8))
plt.xlim(0, 500)
plt.ylim(0,500)
plt.xlabel('X',fontsize=20)
plt.ylabel('Y',fontsize=20)
plt.title('Occ',fontsize=20)
def animate(i):
data = occupancy.iloc[:int(i+1)] #select data range
p = sns.scatterplot(x=data.time, y=data[title], data=df, color="Blue")
p.tick_params(labelsize=17)
plt.setp(p.lines,linewidth=7)
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=400, repeat=True)
ani.save('Occ.mp4', writer=writer)
可以使用sns.scatterplot
里面的hue
参数,将相同Table的点画成相同的颜色。检查此代码:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
df = pd.read_csv('data.csv')
title = 'Occ'
x = np.array(df.x)
y = np.array(df.y)
Writer = animation.writers['ffmpeg']
writer = Writer(fps = 20, metadata = dict(artist = 'Me'), bitrate = 1800)
fig = plt.figure(figsize = (12, 8))
def animate(i):
plt.gca().cla()
data = df.iloc[:int(i + 1)] # select data range
p = sns.scatterplot(x = 'x', y = 'y', hue = 'table', data = data, s = 200, alpha = 0.5)
p.tick_params(labelsize = 17)
plt.setp(p.lines, linewidth = 7)
plt.xlim(0, 500)
plt.ylim(0, 500)
plt.xlabel('X', fontsize = 20)
plt.ylabel('Y', fontsize = 20)
plt.title('Occ', fontsize = 20)
ani = matplotlib.animation.FuncAnimation(fig, animate, frames = len(df), repeat = True)
ani.save('Occ.mp4', writer = writer)
plt.show()
这给了我这个动画:
我稍微更改了您的代码(我删除了 occupancy
数据框和原始数据框的 plottet x
和 y
列)以便 运行 正确动画。您可以在代码中实现 hue = 'table'
参数。
我尝试使用 matplotlib.animation.FuncAnimation
对分类数据进行动画处理。但是,我还没有找到根据类别 table
为动画 x
y
值着色的方法。这是我的数据集 DF:
x y time table
0 150.0 126.0 0 Table3
1 160.0 244.0 0 Table1
2 153.0 126.0 1 Table3
3 159.0 244.0 1 Table1
4 154.0 131.0 2 Table3
5 161.0 243.0 2 Table1
6 149.0 131.0 3 Table3
7 158.0 244.0 3 Table1
8 394.0 247.0 4 Table4
9 150.0 128.0 4 Table3
10 161.0 243.0 4 Table1
11 160.0 244.0 5 Table1
12 154.0 130.0 5 Table3
13 153.0 129.0 6 Table3
14 163.0 237.0 6 Table1
15 134.0 128.0 7 Table3
16 162.0 238.0 7 Table1
17 162.0 237.0 8 Table1
18 162.0 240.0 9 Table1
19 163.0 239.0 10 Table1
20 164.0 239.0 11 Table1
21 165.0 239.0 12 Table1
22 266.0 195.0 13 Table2
23 163.0 240.0 13 Table1
24 165.0 239.0 14 Table1
25 164.0 239.0 15 Table1
26 165.0 239.0 16 Table1
27 165.0 240.0 17 Table1
28 394.0 259.0 17 Table4
29 151.0 129.0 18 Table3
有没有人建议如何根据 table
列为动画着色?我玩弄了这段代码,但还没有找到办法。感谢任何帮助!!
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
title = 'Occ'
x = np.array(df.x)
y = np.array(df.y)
occupancy = pd.DataFrame(y,x)
occupancy.columns = {title}
Writer = animation.writers['ffmpeg']
writer = Writer(fps=20, metadata=dict(artist='Me'), bitrate=1800)
fig = plt.figure(figsize=(12,8))
plt.xlim(0, 500)
plt.ylim(0,500)
plt.xlabel('X',fontsize=20)
plt.ylabel('Y',fontsize=20)
plt.title('Occ',fontsize=20)
def animate(i):
data = occupancy.iloc[:int(i+1)] #select data range
p = sns.scatterplot(x=data.time, y=data[title], data=df, color="Blue")
p.tick_params(labelsize=17)
plt.setp(p.lines,linewidth=7)
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=400, repeat=True)
ani.save('Occ.mp4', writer=writer)
可以使用sns.scatterplot
里面的hue
参数,将相同Table的点画成相同的颜色。检查此代码:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
df = pd.read_csv('data.csv')
title = 'Occ'
x = np.array(df.x)
y = np.array(df.y)
Writer = animation.writers['ffmpeg']
writer = Writer(fps = 20, metadata = dict(artist = 'Me'), bitrate = 1800)
fig = plt.figure(figsize = (12, 8))
def animate(i):
plt.gca().cla()
data = df.iloc[:int(i + 1)] # select data range
p = sns.scatterplot(x = 'x', y = 'y', hue = 'table', data = data, s = 200, alpha = 0.5)
p.tick_params(labelsize = 17)
plt.setp(p.lines, linewidth = 7)
plt.xlim(0, 500)
plt.ylim(0, 500)
plt.xlabel('X', fontsize = 20)
plt.ylabel('Y', fontsize = 20)
plt.title('Occ', fontsize = 20)
ani = matplotlib.animation.FuncAnimation(fig, animate, frames = len(df), repeat = True)
ani.save('Occ.mp4', writer = writer)
plt.show()
这给了我这个动画:
我稍微更改了您的代码(我删除了 occupancy
数据框和原始数据框的 plottet x
和 y
列)以便 运行 正确动画。您可以在代码中实现 hue = 'table'
参数。