我有一個文本檔案,上面有兩個圓的坐標。我想制作兩個粒子的實時影片。由于某種原因,以下代碼崩潰
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
import pandas as pd
df = pd.read_csv('/path/to/text/file.txt', sep=" ", header=None)
fig = plt.figure()
fig.set_dpi(100)
fig.set_size_inches(7, 6.5)
ax = plt.axes(xlim=(0, 60), ylim=(0, 60))
patch = plt.Circle((5, -5), 6, fc='y')
patch2 = plt.Circle((5, -5), 6, fc='y')
def init():
patch.center = (df[0][0], df[1][0])
patch2.center = (df[2][0], df[3][0])
ax.add_patch(patch)
return patch, patch2,
def animate(i):
x, y = patch.center
x2, y2 = patch2.center
x = df[0][i]
y = df[1][i]
x2 = df[2][i]
y2 = df[3][i]
patch.center = (x, y)
patch2.center = (x2, y2)
i = 1
return patch, patch2,
anim = animation.FuncAnimation(fig, animate,
init_func=init,
frames=360,
interval=20,
blit=True)
plt.show()
從中獲取資料的文本檔案具有 X1、Y1、X2 和 Y2 列,其中 X1 表示第一個粒子的 x 坐標等。
如果我洗掉對第二個粒子的所有參考,它會作業并完全顯示第一個。任何幫助,將不勝感激。
文本檔案的示例如下:
40.028255 30.003469 29.999967 20.042583 29.999279 29.997491
40.073644 30.001855 30.000070 20.090549 30.002644 29.997258
40.135379 29.996389 29.995906 20.145826 30.005277 29.997931
40.210547 29.998941 29.996237 20.197438 30.004859 30.002082
40.293916 30.002021 29.992079 20.248248 29.998585 30.006919
(此代碼中未使用后面的列)并且確切的錯誤訊息是'AttributeError:'NoneType'物件沒有屬性'_get_view''。
謝謝
uj5u.com熱心網友回復:
代碼崩潰是因為您以錯誤的方式“混合”了 matplotlib 的“pyplot”和“面向物件”方法。這是作業代碼。請注意,我創建ax了要添加藝術家的軸。在這個軸上,我還應用了軸限制。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.patches import Circle
N = 360
df = pd.DataFrame({
"x1": np.linspace(0, 60, N),
"y1": np.linspace(0, 60, N),
"x2": np.flip(np.linspace(0, 60, N)),
"y2": np.linspace(0, 60, N),
})
fig = plt.figure()
ax = fig.add_subplot()
ax.set_xlim(0, 60)
ax.set_ylim(0, 60)
patch = Circle((5, -5), 6, fc='y')
patch2 = Circle((5, -5), 6, fc='y')
ax.add_artist(patch)
ax.add_artist(patch2)
def init():
patch.center = (df["x1"][0], df["y1"][0])
patch2.center = (df["x2"][0], df["y2"][0])
return patch, patch2
def animate(i):
x, y = patch.center
x2, y2 = patch2.center
x = df["x1"][i]
y = df["y1"][i]
x2 = df["x2"][i]
y2 = df["y2"][i]
patch.center = (x, y)
patch2.center = (x2, y2)
i = 1
return patch, patch2,
anim = animation.FuncAnimation(fig, animate,
init_func=init,
frames=N,
interval=20,
blit=True)
plt.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/463668.html
標籤:Python 熊猫 matplotlib 动画片
上一篇:行為型:九. 狀態模式
下一篇:如何使每個腳本與每個啟蒙分開?
