视觉模拟量表

时间:2018-08-10 11:09:15

标签: python psychopy

我正在PsychoPy(v。1.90.1)中进行元认知实验,我需要一个视觉模拟量表来衡量自信心。但是,我找不到从Psychopy VAS末端去除数值(01)的方法。 有什么办法藏起来吗?

我需要单词标签("Not at all confident""Extremely confident"),但我也想将答案以0-100量表(或等效的0-1)记录为模拟量表可以做到(因此切换到分类不会)。

有什么建议吗?

谢谢。

索尼娅

3 个答案:

答案 0 :(得分:1)

看看the documentation,尤其是labelsscale。这是一种解决方案:

# Set up window and scale
from psychopy import visual
win = visual.Window()
scale = visual.RatingScale(win, 
    labels=['Not at all confident', 'Extremely confident'],   # End points
    scale=None,  # Suppress default
    low=1, high=100, tickHeight=0)

# Show scale
while scale.noResponse:
    scale.draw()
    win.flip()

# Show response
print scale.getRating(), scale.getRT()

答案 1 :(得分:1)

您可能还对新的Slider感兴趣,新的{{3}}已包含在当前PsychoPy Beta版本中,并将成为下一发行版的一部分。这是一个Python 3代码示例,如何使用它:

from psychopy.visual.window import Window
from psychopy.visual.slider import Slider

win = Window()
vas = Slider(win,
             ticks=(1, 100),
             labels=('Not at all confident', 'Extremely confident'),
             granularity=1,
             color='white')

while not vas.rating:
    vas.draw()
    win.flip()

print(f'Rating: {vas.rating}, RT: {vas.rt}')

在重新使用之前,您必须致电vas.reset()

答案 2 :(得分:1)

可能我会扩展@hoechenberger的答案以增加对

的支持
  1. 每次试验的随机开始(将markerPos设置为以刻度线为单位的随机值)
  2. 按键支持(只需使用按键来调整markerPos,并在完成后将其分配给rating
  3. 自定义步长(当您了解(2)时,这可能很明显)
  4. Python2.7(无需在此处强制Py3.6:wink:)

代码如下:

from psychopy import visual
from psychopy import event
from numpy.random import random

stepSize = 2

win = visual.Window()
vas = visual.Slider(win,
             ticks=(0, 1),
             labels=('Not at all confident', 'Extremely confident'),
             granularity=1,
             color='white')

for thisTrialN in range(5):
    vas.reset()
    vas.markerPos = random()  # randomise start
    while not vas.rating:
        # check keys
        keys = event.getKeys()
        if 'right' in keys:
            vas.markerPos += stepSize
        if 'left' in keys:
            vas.markerPos -= stepSize
        if 'return' in keys:
            # confirm as a rating
            vas.rating = vas.markerPos
        # update the scale on screen
        vas.draw()
        win.flip()

    print('Rating: {}, RT: {}'.format(vas.rating, vas.rt))