PsychopyとMatplotlibを使用して、画面の左側にランダムな向き(0,360)、サイズ、位置の100個の矩形を表示します。私はオリエンテーションの各象限に固有の色を割り当てています(オリエンテーションは全て<、緑色は90以上、<は180、青色はすべて> 180、<は270、灰色はすべて> 270)。私は、各矩形のどれくらいがそれらの範囲内にあるのかを数え続け、Matplotlibを使ってプロットしています。グラフを保存し、Psychopy Imagestimを使用してグラフを呼び出して、グラフの右側にグラフを表示します。私はこのスクリプトを関数に保存しておき、関数を何度も実行しています。アイデアは、各キーを押すごとに、長方形(左)と新しい付随グラフ(右)の新しい表示が得られます。MatplotlibをPsychopyループに描画する
私の問題は、長方形と矩形の数が正しく表示されているが、グラフが正しく更新されていないことです。たとえば、最初の試行で24のレッドがある場合、赤いバーにこれが表示されます。しかし、次の試行で22のレッドがある場合、グラフの赤い部分は23に減少せず、24にとどまります。基本的に増加します。これはグラフ全体(すべての色)の場合で、各試行ごとに各バーが増加するだけのグラフになります(削減なし)。なぜこれが起こっているのか分かりません。私はそれがMatplotlibに4つの(色の)変数をどのように渡しているかに問題があると仮定しましたが、それぞれの試行の始めに0にリセットされています。このような理由から私は問題を理解することができません。誰もがそれを試してみたい場合
import random
import psychopy.visual
import psychopy.event
import psychopy.core
import numpy as np
import matplotlib.pyplot as plt
win = psychopy.visual.Window(
size = [1200,550],
units = "pix",
fullscr=False,
color=[-1,-1,-1]
)
def one():
win.flip()
rect=psychopy.visual.Rect(win=win,units="pix")
n_rect=100
performance = []
red = 0
green = 0
blue = 0
grey = 0
for i_rect in range(n_rect):
rect.width = random.uniform(10,100)
rect.height = random.uniform(10,100)
rect.ori = random.uniform(0,360)
rect.pos = [
random.uniform(-300,-10),
random.uniform(-300,300)
]
if rect.ori < 90:
rect.fillColor = (1,-1,-1)
red += 1
elif rect.ori >90 and rect.ori <180:
rect.fillColor = (-1,1,-1)
green += 1
elif rect.ori > 180 and rect.ori < 270:
rect.fillColor = (-1,-1,1)
blue += 1
else:
rect.fillColor = (0,0,0)
grey += 1
rect.draw()
print ("red: %i")%(red)
print ("green: %i")%(green)
print ("blue: %i")%(blue)
print ("grey: %i")%(grey)
red_text = psychopy.visual.TextStim(win,text = red, pos = (165,-180))
green_text = psychopy.visual.TextStim(win,text = green,pos = (295,-180))
blue_text = psychopy.visual.TextStim(win,text = blue, pos = (425,-180))
grey_text = psychopy.visual.TextStim(win,text = grey, pos = (555,-180))
color_text_list = [red_text,green_text,blue_text,grey_text]
for color in color_text_list:
color.draw()
# Here I pass the value of my colour variables to Matplotlib for plotting
plt.style.use('ggplot')
colors = ('red','green','blue','grey')
y_pos = np.arange(len(colors))
performance = [red,green,blue,grey]
x = plt.bar(y_pos, performance, align='center')
x[0].set_color('red')
x[1].set_color('green')
x[2].set_color('blue')
x[3].set_color('grey')
plt.xticks(y_pos, colors)
plt.ylabel('count')
plt.savefig('image.png',dpi=80,transparent=True)
img = psychopy.visual.ImageStim(
win=win,
image="image.png",
units="pix",
pos = (350,50)
)
rect.draw()
img.draw()
win.flip()
psychopy.event.waitKeys()
for i in range(20):
one()
win.close()
コードは、それ自身の上で実行することができます。コードは比較的シンプルですが、私がMatplotlibを使ったのは初めてのことですが、明らかに何か不足しているかもしれません。
おかげで、 スティーブ
1 -
はあなたのプロットをクリアする様々な方法のより詳細な説明については、この質問を参照してください。 @Andrew Guyは、それぞれの反復でプロットをクリアする必要があるという点でスポットです。 –