matplotlib 更新循环中的多个散点图

dgtucam1  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(153)

我有两个数据集,我想产生散点图,用不同的颜色。
根据MatPlotLib: Multiple datasets on the same scatter plot中的建议
我设法绘制了它们。然而,我希望能够更新循环内的散点图,这将影响两组数据。我看了matplotlib动画包,但它似乎不符合要求。
我无法从循环中更新绘图。
代码的结构看起来像这样:

fig = plt.figure()
    ax1 = fig.add_subplot(111)
    for g in range(gen):
      # some simulation work that affects the data sets
      peng_x, peng_y, bear_x, bear_y = generate_plot(population)
      ax1.scatter(peng_x, peng_y, color = 'green')
      ax1.scatter(bear_x, bear_y, color = 'red')
      # this doesn't refresh the plots

字符串
其中generate_plot()从带有附加信息的numpy数组中提取相关的绘图信息(x,y)坐标,并将它们分配给正确的数据集,以便它们可以以不同的颜色显示。
我试过清除和重绘,但我似乎不能让它工作。
编辑:稍微澄清一下。我想做的基本上是在同一个图上做两个散点图的动画。

f4t66c6m

f4t66c6m1#

下面是一个可能符合您描述的代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# Create new Figure and an Axes which fills it.
fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)
ax.set_xlim(-1, 1), ax.set_xticks([])
ax.set_ylim(-1, 1), ax.set_yticks([])

# Create data
ndata = 50

data = np.zeros(ndata, dtype=[('peng', float, 2), ('bear',    float, 2)])

# Initialize the position of data
data['peng'] = np.random.randn(ndata, 2)
data['bear'] = np.random.randn(ndata, 2)

# Construct the scatter which we will update during animation
scat1 = ax.scatter(data['peng'][:, 0], data['peng'][:, 1], color='green')
scat2 = ax.scatter(data['bear'][:, 0], data['bear'][:, 1], color='red')

def update(frame_number):
    # insert results from generate_plot(population) here
    data['peng'] = np.random.randn(ndata, 2)
    data['bear'] = np.random.randn(ndata, 2)

    # Update the scatter collection with the new positions.
    scat1.set_offsets(data['peng'])
    scat2.set_offsets(data['bear'])

# Construct the animation, using the update function as the animation
# director.
animation = FuncAnimation(fig, update, interval=10)
plt.show()

字符串
你可能还想看看http://matplotlib.org/examples/animation/rain.html,你可以在那里学习更多的散点图动画的调整。

相关问题