Если вы хотите переместить данные на одну выборку, вы можете использовать функцию circshift
.Например, если вы хотите, чтобы новые значения отображались слева, вы можете сместить все значения на 1 образец вправо, а затем добавить новое значение в первую позицию.
Для преобразования фигуры MATLAB в Psychtoolboxтекстуры, вам не нужно сохранять, а затем загружать временные изображения.Вместо этого вы можете использовать функцию getframe
для захвата данных фигур MATLAB, которые затем можно передать MakeTexture, чтобы превратить их в текстуру Psychtoolbox.
Я не уверен, какие значения вы на самом деле используете дляsubloop, value0 и т. д., но есть пример, который, я думаю, может быть близок к тому, что вы хотите.В этом примере показано 30 кадров рисунков, причем каждый рисунок отображается на экране в течение 1 секунды.Новые точки данных генерируются случайным образом и появляются в левой части рисунка.
В зависимости от деталей вашего эксперимента, вы можете обнаружить, что этот подход все еще слишком медленный.Вы также можете создать фигуру напрямую с помощью таких методов рисования в Psychtoolbox, как DrawLines и т. Д., Хотя это потребует дополнительных усилий.
try
win0 = Screen('OpenWindow', 0, 0);
Num_timepoint = 100;
subloop = 100;
value0 = zeros(1,100);
num_demo_frames = 30;
% Draw the graph
fig_h = figure('visible','off','color',[0 0 0]);
pcolor([0 Num_timepoint+2],[-10 0],ones(2,2));
hold on;
pcolor([0 Num_timepoint+2],[0 10],2*ones(2,2));
colormap([79 167 255;255 187 221]/256);
plot_h = plot(1:subloop,value0,'*-',...
'color',[0,0,0],...
'LineWidth',1,...
'MarkerSize',5,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.5,0.5,0.5]);
axis([0,Num_timepoint+2,-10,10]);
for f = 1:num_demo_frames
new_value = randn(1,1);
data_values = plot_h.YData;
data_values = circshift(data_values, 1);
data_values(1) = new_value;
plot_h.YData = data_values;
plot_values = getframe(fig_h);
imageDisplay=Screen('MakeTexture', win0, plot_values.cdata);
Screen('DrawTexture', win0, imageDisplay);
Screen('Flip', win0);
WaitSecs(1);
end
sca;
catch e
sca;
rethrow(e);
end