我试图给小提琴画一个动画,所以我开始做一些我认为应该是非常基本的东西,但它不起作用.我认为问题是violinplot不接受set_data,但我不知道如何将更改的数据传递给violinplot.对于这个例子,我想要一个平均值慢慢转移到更高值的图.如果我正在咆哮错误的树,请告知一个有效的动画小提琴图的代码.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots()
data = np.random.rand(100)
def animate(i):
v.set_data(data+i) # update the data
return v
v = ax.violinplot([])
ax.set_ylim(0,200)
v_ani = animation.FuncAnimation(fig, animate, np.arange(1, 200),
interval=50, blit=True)
最佳答案 实际上,小提琴图没有set_data方法.原因可能是,在创建这样的情节时,背景中会进行大量计算,并且它包含很多不同的元素,这些元素很难更新.
最简单的选择是简单地重绘小提琴图而不使用blitting.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots()
data = np.random.normal(loc=25, scale=20, size=100)
def animate(i, data):
ax.clear()
ax.set_xlim(0,2)
ax.set_ylim(0,200)
data[:20] = np.random.normal(loc=25+i, scale=20, size=20)
np.random.shuffle(data)
ax.violinplot(data)
animate(0)
v_ani = animation.FuncAnimation(fig, animate, np.arange(1, 200),
fargs=(data,), interval=50, blit=False)
plt.show()