2016-03-05 60 views
0

我有兩個數據集,我想用不同的顏色爲散點圖生成散點圖。Matplotlib:更新循環中的多個散點圖

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)COORDS,並將它們分配到正確的數據集所以他們可以有不同的顏色。

我試過清理和重繪,但我似乎無法得到它的工作。

編輯:稍微澄清。我想要做的基本上是在同一個圖上動畫兩個散點圖。

+0

'scatter命令之後可能需要'plt.show()',通常在循環之外。 – roadrunner66

+0

如果它在循環之外,是不是隻會更新一次數字,或者更糟糕的是,在最終的數字上添加每個散點圖(在這種情況下是2 * gen)? – Gsp

回答

1

下面是可能適合你的描述代碼:

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。您可以通過動畫設計散點圖來了解更多細節。

+0

感謝您的幫助,但它不是很有效。我應該提到這一點,但我有一個主要方法,所以我得到了一些範圍問題(如定義之前調用更新)。我試着玩弄它,但似乎無法弄清楚。 – Gsp